C++,只读取文件某一行,以空格作为间隔存入整型数组中。

例如:文件中存储以下内容
5;2 1,11 2
6;2 3,13 1
7;2 3,7 1,11 1
....
只想读取开头为6的那一行,并且把该行除了6之外的其他数字存入整型数组,及得到 int b[]={2,3,13,1}。

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
char a[][30] = {0};
int b[10] = {0};
int i = 0;
int m = 0;
ifstream in("a.txt");
if (!in.is_open())
{
cout << "读取文件失败";
}
while(!in.eof())
{
in.getline(a[i],30,'\n');
i++;
}
char *p = a[1];
int n = 0;
for(int j = 0; j < 30; j++)
{
if(p[j] == ' ')
{
p[j] = '\0';
b[m] = atoi(p+n);
m++;
n = j+1;
}
}
b[m] = atoi(p+n);

in.close();
system("pause");

return 1;
}

数组b[10]里面装的是{6,2,3,13,1,0,0,0,0,0}
有了这个数组就好办了,不要6就直接去掉就行了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-21
#include<stdio.h>

main(){
FILE *fin;
char buff[500];
int id,flag=0,i,j;
int a[10];
fin=fopen("abc.txt","r");
while(1){
if (fgets(buff,100,fin)==NULL)break;
sscanf(buff,"%d;",&id);
if (id==6){flag=1;break;}
}
fclose(fin);
if (flag==0) printf("no results\n");
else {
for (i=0;i<strlen(buff);i++) if (buff[i]==';') {strcpy(buff,&buff[i+1]);break;};
for (i=0;i<strlen(buff);i++) if (buff[i]==',') buff[i]=' ';
j = sscanf(buff,"%d %d %d %d %d %d %d %d %d %d",
&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9]);
for (i=0;i<j;i++) printf("%d\n",a[i]);
}
return 0;
}

数据存在 abc.txt 中。
读入 6 这行,存 a[].本回答被网友采纳
第2个回答  2013-09-04
以‘\n’为行依据,也许你需要的是substr()
第3个回答  2013-09-04
你的数字之间,有逗号、有分号还有空格,实际文件也是这样的吗追问

是这样的,换另一种写法也可以。
5 2 1 11 2
6 2 3 13 1
7 2 3 7 1 11 1
即所有的数字之间用空格隔开。
还是想搜索开头为给定数字的那一行,比如给定6,搜到它所在的那一行,把其余数字放到数组里,得到 int b[]={2,3,13,1}。这要怎么实现呢?

追答

每行的数字个数也是不确定的吗

追问

不确定的,数字个数随意。

追答

可以在不确定每行数字的长度,任意的设定读取的首个数字


TXT 文件的内容


首个数字是 8 的查询


首个数字是 6 的查询


首个数字是 7 的查询

这样的结果可以吗

追问

可以,能把代码或代码片段发给我吗?谢谢啦~

追答

满意请采纳,然后私信联系我

本回答被提问者采纳
相似回答