C++ C++,按数字读取文件行
我想创建一个按编号读取文件的控制台项目。示例:按数字查找12,它只在控制台中打印包含这些数字的文件夹中的文本行C++ C++,按数字读取文件行,c++,ifstream,C++,Ifstream,我想创建一个按编号读取文件的控制台项目。示例:按数字查找12,它只在控制台中打印包含这些数字的文件夹中的文本行 bibi ceki 1 2 hasesh cekiii 1 3 krki cko 1 2 在这种情况下,它只需打印出“bibiceki”和“krkicko”。 在我的代码中有很多遗漏的东西。我没有一个循环来检查是否有正确的数字,但以下是
bibi ceki 1 2
hasesh cekiii 1 3
krki cko 1 2
在这种情况下,它只需打印出“bibiceki”和“krkicko”。
在我的代码中有很多遗漏的东西。我没有一个循环来检查是否有正确的数字,但以下是我能做的最好的事情和我尝试的:
#include <fstream>
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main() {
char str1[10], str2[10];
int raz, ode;
ifstream infile("file.txt");
while (infile.good()) {
fscanf(infile, "%s %s %d %d", str1, str2, &raz, &ode); //this thing cant be used lik this
while(raz==1 && ode==2) {
string sLine;
getline(infile, sLine);
cout << sLine << endl;
}
}
infile.close();
return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
字符str1[10],str2[10];
int-raz,ode;
ifstream infle(“file.txt”);
while(infle.good()){
fscanf(infle,“%s%s%d%d”,str1,str2,&raz,&ode);//这个东西不能像这样使用
而(raz==1&&ode==2){
弦线;
getline(填充、sLine);
CUT< P>你正在混合C fSCANF函数和C++ IFSIFE.
我会用C++来计算,在这种情况下,你可以使用操作符>:
std::string str1, str2 ;
...
//substitute the following line with the one below
//fscanf(infile, "%s %s %d %d", str1, str2,&raz,&ode);
infile >> str1 >> str2 >> raz >> ode ;
您可以使用std::getline
逐行读取,直到代码匹配为止,当代码匹配时,您可以将名称向后推
到std::vector
中。您还可以使用分隔符来构造文件,例如“|”
,这样您可以读取该字符作为名称,其余字符作为代码。示例文件如下:
bibi ceki|1 2
hasesh cekiii|1 3
krki cko|1 2
以下是您如何实现这一目标的示例:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int main()
{
ifstream in_file("file.txt", ios::in);
vector<string> vec;
string names; // store names like: "bibi ceki"
string codes; // store codes like: "1 2"
while (getline(in_file, names, '|')) {
getline(in_file, codes, '\n');
if (codes == "1 2")
vec.push_back(names);
}
for (unsigned int i = 0; i != vec.size(); ++i)
cout << vec[i] << endl;
in_file.close();
}
当谈到C++时,很高兴看到实际的C++被使用。不错,你是对的,我在C++开始之前使用C。它不再调用错误,但仍然没有打印行。谢谢。它打印任何东西吗?你能看到调试器得到什么吗?或者只需添加一个STD::CUT@ KUCI试试,它就行了。<代码> RAZ=1和&ode==2
printsbibi-ceki
,krki-cko
。而raz==1&&ode==3
printshasesh-cekiii
。我将While(raz==1&&ode==2)
更改为if(raz==1&&ode==2){行得通!!:D@raymelfrancisco,我怎样才能将你的评论标记为答案?我遇到了一些奇怪的错误。错误:C++98模式|中不允许使用基于范围的“for”循环。我想这会行得通的,我只需要修复这个错误。@kuki,你可以使用一个普通的for循环,我编辑了答案来使用它。基于范围的for循环在编译时可以工作使用-std=c++11
感谢您的努力,看起来我找到了另一个解决方案,可以很好地处理我的txt文件类型。
bibi ceki
krki cko