C++字符串操作,字符串下标越界

3

基本上这应该做到:

1) 获取字符串并找出其长度

2) 遍历所有key元素,并将所有唯一成员放入起始位置(Playfair密码)

Table::Table(string key) {
    int i;
    for(i = 0; i < key.length(); i++) {
        if(start.find(key[i]) == string::npos) { //start is empty string
            start[start.length()] = key[i]; // this line gives error
        }
    }
}

错误: 在此输入图片描述
3个回答

6

因为有效的索引范围是从0length - 1,如果想要向字符串添加一个字符,请使用push_back函数。

start.push_back(key[i]); //this will increase the length by 1

哦,对了,push_back,我都忘记了。 - Jaanus

1
遍历键中的所有元素,并将所有唯一成员放入 start (playfair 密码)。
更好的做法是使用 std::set。而不是自己查找字符,只需使用 set::insert 方法即可。
稍后只需使用 std::copy 将 set 的内容复制到 string 中。

-1

有问题的代码行应该是

start[start.length() - 1] = key[i];

字符串索引从0到(length() - 1)。


不应该是push_back吗? - Armen Tsirunyan
当长度为0时,就像在开始时一样,我会尝试将元素添加到位置“-1”?!我认为你错了,Brett。 - Jaanus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接