2

第一个问题

我尝试执行以下操作

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

cout << "Delimiter is " << delimiter << endl;

我的 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

它在运行时返回一个错误代码

terminate called after throwing an instance of 'std::out_of_range'
  what():  basic_string::substr
Aborted (core dumped)

我想将值 # 作为我的分隔符,

第二个问题

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

#define LINE_DATA_DELIMITER     ","

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

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

4

2 回答 2

5

发生这种情况是因为您多次运行循环。只有在一次读取失败后才会出现这种eof情况。

试试这个

myfile.open("file.txt");
while(getline(myfile,sline))
{ 
   delimiter = sline.substr(2,1);
 } 
于 2012-08-06T11:58:44.440 回答
0

我在 substr 文档http://www.cplusplus.com/reference/string/string/substr/中读到了这个。

“如果传递的位置超过了字符串的末尾,则会引发 out_of_range 异常。” 我认为这是因为在 sline.substr(2,1) 你倒置了范围。

于 2012-08-06T11:58:33.697 回答