C++ substr用法返回错误

use*_*897 2 c++

第一个问题

我试着做以下事情

myfile.open("file.txt");
    while(!myfile.eof())
    {
getline(myfile,sline);
delimiter = sline.substr(2,1);
    }

cout << "Delimiter is " << delimiter << endl;
Run Code Online (Sandbox Code Playgroud)

我的file.txt是这样的

AD#Andorra#AN#AD#AND#20.00#Andorra la Vella#Europe#Euro#EUR#67627.00
AE#United Arab Emirates#AE#AE#ARE#784.00#Abu Dhabi#Middle East#UAE Dirham#AED#2407460.00
Run Code Online (Sandbox Code Playgroud)

它在运行时返回错误代码

terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::substr
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)

我希望将值#作为我的分隔符,

第二个问题

我的.h文件得到了这个声明

#define LINE_DATA_DELIMITER     ","
Run Code Online (Sandbox Code Playgroud)

我可以将LINE_DATA_DELIMITER重新定义为"#",而不是使用"#",我可以使用变量分隔符的值来定义.

更新:问题1已解决..我需要第二个问题的帮助谢谢!

Bo *_*son 5

它发生的原因是你运行循环次数太多了.eof只有一次读取失败才会发生这种情况.

试试这个

myfile.open("file.txt");
while(getline(myfile,sline))
{ 
   delimiter = sline.substr(2,1);
 } 
Run Code Online (Sandbox Code Playgroud)