我有一个文本文件,其中的数据以下列格式存储: -
aabb:aabb
aacc:aacc
aadd:aadd
bbdd:bbdd
bbaa:bbaa
我正在逐行阅读文件并试图分开':'两边的文字。我将每一行都放入一个字符串行。我将字符左侧分配给':',字符串中的字符为char,字符右侧为':',字符为char,字符串为m。但问题是在执行两个循环后字符串w和m变空。为什么字符串w和m为空?
int flag;
string line, w, m;
ifstream fin;
fin.open("files/file2.txt",ios::in);
if (fin.is_open()) {
while (getline(fin,line)) {
for (int i=0; i<line.length(); i++) {
if (line[i] == ':') {
flag = i+1;
break;
} else
w[i] = line[i];
}
for(int i=flag,k=1; i<line.length(); i++,k++) {
m[k] = line[i];
}
cout<<w<<'\n';
cout<<m<<'\n';
}
fin.close();
}
感谢您的帮助。
答案 0 :(得分:2)
您的代码存在的问题是您要将字符分配给m
和w
尚不存在的位置:这两个字符串最初都是空的,因此对它们应用[]
会导致未定义的行为。
由于您要在字符串末尾添加字符,请使用append
代替[]
:
w.append(1, line[i]);
...
m.append(1, line[i]);
或+=
:
w += line[i];
...
m += line[i];