C++ 如何从string字符串中一行行读取数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 如何从string字符串中一行行读取数据相关的知识,希望对你有一定的参考价值。
如: 有一个string字符串,里面放了几行数据,我如何
从中一行行的把数据读出来,每次读出一行。
如果是从文件中读取数据,一行一行的读取,用getline
#include <iostream>
fstream in;
CString strFileName = "E:\\测试\\a.txt"; //路径是双斜杠
in.open(strFileName,ios::in); //ios_base::in
while( !in.eof()) //如果没有读到文件结尾
string strBuff;
getline(in,strBuff); //strBuff即 一行的数据
in.close(); 参考技术A ifstream buy("StuffToBuy.dat");//StuffToBuy.dat文件有数据
还可以这样
input.open(FILE_IN,ios::in|ios::nocreate);//打开文件
//检查文件是否打开
if(!input)
cout<<"\n文件无法打开"<<FILE_IN;
exit(1);
你可以把这些数据放在一个文件里面.txt转成.dat即可 注意名字要一致
另外,虚机团上产品团购,超级便宜 参考技术B 你可以做一个读的循环,每当遇到“回车”,就停止读取,就OK了 参考技术C char strResult[128];
char strText[1024];
strcpy(strText,"(char *sourceStr,int index,char *strFenge,char *strSubResult)");
typedef int (WINAPI ICEPUB_GETFORMATSTRING)( char *sourceStr,int index,char *strFenge,char *strSubResult);
ICEPUB_GETFORMATSTRING *icePub_getFormatString = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
icePub_getFormatString = (ICEPUB_GETFORMATSTRING *)GetProcAddress(hDLLDrv, "icePub_getFormatString");
if(icePub_getFormatString)
retCode = icePub_getFormatString(strText,0,",",strResult);
AfxMessageBox(strResult);
retCode = icePub_getFormatString(strText,1,",",strResult);
AfxMessageBox(strResult);
if(hDLLDrv)
FreeLibrary(hDLLDrv);
http://dl.icese.net/dev.php?f=icePubDll.rar 下载 参考技术D (不好意思,看错了,原来是C++)……
C语言如何读取一行数据,以空格分开
有这么一个文本文件 stu.txt,内容如下:
10001 杨松 1982-02-08
10002 张三 1982-03-08
10003 李四 1980-04-01
10004 王五 1986-06-10
10005 朱六 1982-03-04
要求只能用c语言(不能用C++ 的fstream类库),读取这些数据,存放在结构体:
typedef struct _STUDENT_
char stuID[6];
char name[12];
char birthday[12];
Student数组里,
C++可以用istringstream stream(line);//line是一行
再stream>>word;//word是存放单词
这个stream可以将一行以空格分开,再三次输入word放在结构体的三个成员里,
可是C语言没有这样的函数,像fgets,fscanf之类的都是一次只能读取定长的字符,使用非常不便,怎么样才能以空格分开读取这类文件呢?请高手指教。
可以使用strtok函数做分割单词。
#include<string.h>
voidmain()
chars[]="192.168.0.26";
char*delim=".";
char*p;
printf("%s",strtok(s,delim));
while((p=strtok(NULL,delim)))
printf("%s",p);
printf("\\n");
扩展资料
在C++中strtok的使用
#include<iostream>
#include<cstring>
usingnamespacestd;
intmain()
charsentence[]="Thisisasentencewith7tokens";
cout<<"Thestringtobetokenizedis:\\n"<<sentence<<"\\n\\nThetokensare:\\n\\n";
char*tokenPtr=strtok(sentence,"");
while(tokenPtr!=NULL)
cout<<tokenPtr<<endl;
tokenPtr=strtok(NULL,"");
//cout<<"Afterstrtok,sentence="<<tokenPtr<<endl;
return0;
参考技术A方法和详细的操作步骤如下:
1、第一步,定义一个常量以控制字符串的长度,见下图,转到下面的步骤。
2、第二步,完成上述步骤后,定义两个数组以保存字符和最短的单词,见下图,转到下面的步骤。
3、第三步,完成上述步骤后,在不等于句号的情况下,使用do-while循环控制系统输入文章,见下图,转到下面的步骤。
4、第四步,完成上述步骤后,选取文章中的字符,并将其保存在数组中,见下图,转到下面的步骤。
5、第五步,完成上述步骤后,如果条件小于或等于1,请使用for循环控制获取文章中的最短单词,见下图,转到下面的步骤。
6、第六步,完成上述步骤后,使用if语句确定其是一个空格还是一个句点,并获得一个单词,见下图,转到下面的步骤。
7、第七步,完成上述步骤后,获取最短的单词并将其保存在数组单词中。
运行该程序并输入以点号结尾的英文文章,计算机将输出最短的单词和单词长度,见下图。这样,就解决了这个问题了。
#include <iostream>
#include <fstream>
using namespace std;
int main()
char asd;
char abc;
ifstream inIfstream("in.txt");
ofstream outOfstream("out.txt");
while ( inIfstream.read(&asd, 1) )
if ( ( asd >= 'A' && asd <= 'Z' ) || ( asd >= 'a' && asd <= 'z' ) || ( asd == ' ' ) )
abc = asd;
cout << abc;
outOfstream << abc;
return 0;
参考技术D 可以这样试试。
#include <stdio.h>
#include <string.h>
#include <memory.h>
typedef struct _STUDENT_
char stuID[6];
char name[12];
char birthday[12];
Student;
void main()
Student stud[50];
char line[31], *start, *end;
int i = 0, j;
FILE *fp = fopen("data.txt", "r");
memset(stud, 0, sizeof(stud));
if (fp == NULL)
puts("Can not open file!");
return;
while (fgets(line, 31, fp))
start = end = line;
while (*end++ != ' ');
strncpy(stud[i].stuID, start, end - 1 - start);
start = end;
while (*end++ != ' ');
strncpy(stud[i].name, start, end - 1 - start);
strcpy(stud[i].birthday, end);
++i;
for (j=0; j < i; ++j)
printf("%s ", stud[j].stuID);
printf("%s ", stud[j].name);
printf("%s", stud[j].birthday);
putchar('\n');
fclose(fp);
以上是关于C++ 如何从string字符串中一行行读取数据的主要内容,如果未能解决你的问题,请参考以下文章