将字符分配给 C++ 字符串
assigning char by char to c++ string
我有一个文本文件,其中的数据以以下格式存储:-
aabb:aabb
aacc:aacc
aadd:aadd
bbdd:bbdd
bbaa:bbaa
我正在逐行从文件中读取,并试图将":"两侧的单词分开。我将每行都变成一条字符串。我将单词左分配给":",字符串 w 中的字符一个字符,将单词右分配给":",字符一个字符分配给字符串 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();
}
谢谢你的帮助。
代码的问题在于,您将字符分配给尚不存在的m
和w
的位置:这两个字符串最初都是空的,因此对它们应用[]
会导致未定义的行为。
由于您要在字符串末尾添加字符,因此请使用 append
而不是 []
:
w.append(1, line[i]);
...
m.append(1, line[i]);
或+=
:
w += line[i];
...
m += line[i];