C语言如何读取一行数据,以空格分开
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;
}
方法和详细的操作步骤如下:
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;
}
#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);
}