char a[133];
char x[4]="ccc";
int line=3,count=1;
//string aa;
//cin>>aa;
ifstream out("text");
while(out.getline(a,4,':')&&(strncmp(a,x,4)))
{cout<<"hi";
cout<<a<<endl;
out.getline(a,4,'\n');
}
out.close();
return 0;`
在文本文件中
aaa:1111111
bbb:222222
ccc:333333
ddd:444444
我想跳上特定的线并抓住细节。但我没有得到它。请指导我如何在c ++中完成它
毕竟得到了解决方案。你也可以看到结果
这里是
int main(){
ifstream in ("text");
if(!in){cout<<"cannot open"<<endl;}
string buffer;
int line_count=1; size_t line=1;
while(line){
getline(in,buffer);
if(!buffer.find_first_of("bbb:"))
{
cout<<line<<endl;
break;
}
else
{
line=line+1;
}
}
cout<<buffer<<endl;
for(int line_count=0;line_count<line-1&&getline(in,buffer);line_count++)
{
}
getline(in,buffer);
in.close();
return 0;
}
再次感谢
答案 0 :(得分:2)
首先,您可以将每一行读成std::string
,如下所示:
std::ifstream in("text");
std::string buffer;
int line_count = 0;
// discard lines until we arrive at the desired line or an error/eof occurs
for(int line_count = 0;
line_cout < line && std::getline(in, buffer);
line_count++) {}
if(in) { // check if last extraction was successful
// process line stored in buffer
}
else {
if(in.eof())
std::cout << "Line-number was invalid" << std::endl;
else
std::cout << "An error occurred" << std::endl;
return -1;
}
您可以使用iostreams
here找到有关阅读文件的详细信息。
然后你可以处理那一行。使用成员函数std::string::find_first_of
,您可以找到':'
,并使用成员函数std::string::substr
,您可以在该位置拆分字符串。
请注意,此方法仅适用于问题中描述的简单格式。对于像"ab:c":"content"
这样的格式,它可能无法正常工作。如果你有这样的格式,你需要编写一个更复杂的解析器,最好使用Boost.Spirit.Qi
。