我是C ++语言的新手,我一直在寻找明确的答案,但没有结果。我想要做的是获取文本文件中单行的字符串的substr
值。当我像这样编辑汇编时,我会收到前十二个字母的句子,我没有问题:
a[count] = sentence.substr(0,12);
但是当我尝试将pos
从0
更改为任何其他值时,例如:
a[count] = sentence.substr(1,12);
我收到错误:
在抛出std :: out_of_range的实例后终止调用 what():basic_string :: substr:_pos(这是1)这个 - > size()(为0)
我使用YT和在线指南进行了检查,没有人遇到substr
的问题。
有什么想法吗?
编辑: 抱歉造成混乱。这是代码的一部分:
string sentence;
string a[10000];
string next_line[10000];
main()
{
int count = 1;
fstream file;
file.open("converted.txt",ios::in);
while(!file.eof())
{
getline(file, line);
next_line[count] = line;
sentence = next_line[count];
a[count] = sentence.substr(1,12);
count++;
}
}
答案 0 :(得分:1)
来自feof
此指标通常由流上的上一步操作设置 尝试在文件结尾处读取或超过文件结尾。
这意味着您在条件为false之前已阅读多一行。 此行为空。
来自substr
子字符串是以字符开头的对象部分 位置pos和spans len字符(或直到字符串的结尾, 以先到者为准)。
因此,如果您使用substr
第一个参数0,那就没问题,它被跳过了。但是如果你传递1作为第一个参数,这更多的是字符串有字符,则抛出异常。
这是从文件中正确读取
#include <iostream>
#include <fstream>
using namespace std;
string sentence;
string a[10000];
string next_line[10000];
int main()
{
int count = 1;
std::string line;
fstream file;
file.open("test.txt",ios::in);
while(getline(file, line))
{
next_line[count] = line;
sentence = next_line[count];
a[count] = sentence.substr(1,12);
count++;
}
}