我正在开发一个从文件中读取string
的c ++程序。在string
的末尾有一些数字。我的任务是显示字符串末尾的nth
号码。
这是我的代码。程序接受文件的路径:
#include<iostream>
#include<fstream>
#include<string>
#include<stdlib.h>
using namespace std;
int main(int argc,char** argv)
{
ifstream file;
int num,i=0,pos;
std::string lineBuffer;
file.open(argv[1],ios::in) ;
while (!file.eof())
{
getline(file, lineBuffer);
if (lineBuffer.length() == 0)
continue; //ignore all empty lines
else
{
pos=0;
std::string str1("");
std::string str2("");
std::string final("");
std::string number("");
std::string output("");
while(pos!=(-1))
{
pos=lineBuffer.find(" ");
str2=lineBuffer.substr(0,1);
lineBuffer=lineBuffer.substr(pos+1);
final+=str2;
i++;
}
number=final.substr((i-1));
num=atoi(number.c_str());
output=final.substr(i-(num+1),1);
cout<<output;
}
}
file.close();
return 0;
}
我的程序为文件中的第一行提供了正确的输出。但在那之后,它给了我一个运行时错误。我不知道为什么会这样。
我发送到终端的文件包含:
a b c d 4
b e f g 2
答案 0 :(得分:1)
请在调试器中运行您的程序以了解它正在执行的特定行为。看看它与你期望的不同。
gdb
可能是最简单的,你可以通过谷歌搜索“gdb cheatsheet”左右开始。请记住使用-g
进行编译。
答案 1 :(得分:0)
由于pos
返回size_t
,您应该将int
声明为std::string::find()
而不是size_t
。
此外,当std::string::find()
未匹配任何内容时,它会返回string::npos
而不是-1
。因此,您应该将pos
与string::npos
进行比较,而不是整数文字-1
。