C++的分离数据问题

我现在想输入一行数据,比如姓名、身份证号、工作等等,放在一行上,他们以空格分开,怎样才能分开提取并存储?谢谢
什么意思,能详细点吗,不明白
sorry,我忘记怎么输入一行,并存储了,能帮个忙吗,谢谢
还有,按照你的说法,只提取了一个,但第一个空格后的字符并没有提取,而是放到了NULL中,结下了的数据怎么办?thanks

如果你说的输入是指从键盘输入那么就用格式:
char a[80],b[80],c[80];
scanf("%s%s%s",a,b,c);
这里scanf()格式中%s%s%s之间没有空格,输入时你可以在一行上同时输入姓名、身份证号、工作等等,中间用空格(多少个无所谓)隔开;也可以在输入姓名之后按回车键在第二行输入身份证号再回车再在第三行输入工作等。即
姓名__ 身份证号_______工作
或者
姓名_______身份证号
工作
或者
姓名
身份证号
工作
等等。scanf()函数的特点就是以空格或者Tab或者回车键作为一次数据输入的结束。各数据中间只要有空格你输入的姓名、身份证号、工作就分别自动存到字符数组a[80],b[80],c[80]中.
如果你说的是从磁盘文件中读出一行数据分别存到a[80],b[80],c[80]中,可以用fscanf()函数来实现。我给你举个例子,比如我的文件w02.txt的内容为:
weiwei 10102266 worker
mali 10220135 teacher
weifang 10219936 trader
wangping 10330088 scientist
现在要把它读出来分别存放,则一个完整的c程序如下,程序在win-tc和Dev-c++下已调试通过。这是我写的,你参考一下,比较一下程序执行后w02.txt和w03.txt以及屏幕上的输出。
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 100 /*最多读出100行数据*/

main()
{
int i=0,j,max;
long b[N]; /*假定身份证号为长整型数*/
char s[N][81],a[N][20],c[N][20],*p; /*s[N][81]用来读入文件w02.txt的内容并写进磁盘文件w03.txt*/
FILE *fp1,*fp2;
fp1=fopen("w02.txt","r");
fp2=fopen("w03.txt","w");
while (i<N&&fgets(s[i],81,fp1)!=NULL)
{
p=strchr(s[i],'\n'); /*将每一行最后的回车符去掉*/
if(p)
*p='\0';
i++;
}
max=i;
rewind(fp1); /*重新定位文件内的位置指针*/
for(i=0;i<max;i++)
{ fscanf(fp1,"%s%ld%s\n",a[i],&b[i],c[i]);/*按"%s%ld%s\n"格式分别存放姓名到数组a[][],身份证号到数组b[],工作到数组c[][]中*/
fprintf(fp2,"%s\n",s[i]); /*输出到文件w03.txt中*/
printf("%s\t\t",a[i]); /*打印到屏幕上*/
printf("%ld\t\t",b[i]);
printf("%s\n",c[i]);
}
fclose(fp1);
fclose(fp2);
getch();
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-12-02
strtok,专门用来分割字符串,但是要注意一些细节.具体在这里就不说了.
来个例子给你..
假设已经读取一行数据到strline的字符串中了...

char *str=strdup(strline);
char *p=strtok(str," ");
while(p)
{
// 在这里处理分开的每个数据... 例如,输出的话就是 puts(p);
p=strtok(NULL," ");
}
free(str);
第2个回答  2008-12-02
/d