将字符分配给 C++ 字符串

assigning char by char to c++ string

本文关键字:C++ 字符串 分配 字符      更新时间:2023-10-16

我有一个文本文件,其中的数据以以下格式存储:-

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();
}

谢谢你的帮助。

代码的问题在于,您将字符分配给尚不存在的mw的位置:这两个字符串最初都是空的,因此对它们应用[]会导致未定义的行为。

由于您要在字符串末尾添加字符,因此请使用 append 而不是 []

w.append(1, line[i]);
...
m.append(1, line[i]);

+=

w += line[i];
...
m += line[i];