C语言如何读取一行数据,以空格分开

有这么一个文本文件stu.txt,内容如下:10001杨松1982-02-0810002张三1982-03-0810003李四1980-04-0110004王五1986-... 有这么一个文本文件 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之类的都是一次只能读取定长的字符,使用非常不便,怎么样才能以空格分开读取这类文件呢?请高手指教。
展开
 我来答
爱教育爱学习
高粉答主

2019-11-19 · 学而不思则罔,思而不学则殆
爱教育爱学习
采纳数:384 获赞数:112734

向TA提问 私信TA
展开全部

可以使用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;

}

59分粑粑分享生活
高粉答主

2020-05-10 · 专注生活好物分享,解答日常方方面面的问题
59分粑粑分享生活
采纳数:326 获赞数:119828

向TA提问 私信TA
展开全部

方法和详细的操作步骤如下:

1、第一步,定义一个常量以控制字符串的长度,见下图,转到下面的步骤。

2、第二步,完成上述步骤后,定义两个数组以保存字符和最短的单词,见下图,转到下面的步骤。

3、第三步,完成上述步骤后,在不等于句号的情况下,使用do-while循环控制系统输入文章,见下图,转到下面的步骤。

4、第四步,完成上述步骤后,选取文章中的字符,并将其保存在数组中,见下图,转到下面的步骤。

5、第五步,完成上述步骤后,如果条件小于或等于1,请使用for循环控制获取文章中的最短单词,见下图,转到下面的步骤。

6、第六步,完成上述步骤后,使用if语句确定其是一个空格还是一个句点,并获得一个单词,见下图,转到下面的步骤。

7、第七步,完成上述步骤后,获取最短的单词并将其保存在数组单词中。
 运行该程序并输入以点号结尾的英文文章,计算机将输出最短的单词和单词长度,见下图。这样,就解决了这个问题了。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
useiee
2009-05-27
知道答主
回答量:19
采纳率:0%
帮助的人:17.5万
展开全部
写一个函数判断读到的字符是不是空格(空格的ascii码是32)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
非凡的学生
2009-05-27 · TA获得超过179个赞
知道小有建树答主
回答量:509
采纳率:0%
帮助的人:270万
展开全部
这是读取空格的一个程序你看看吧!
#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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦想窗外
2009-05-27 · TA获得超过1588个赞
知道大有可为答主
回答量:1180
采纳率:0%
帮助的人:1563万
展开全部
可以这样试试。
#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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式