C ++ строковые манипуляции, строковый индекс вне диапазона - PullRequest
3 голосов
/ 06 августа 2011

В основном, что это должно сделать:

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
        }
    }
}

ошибка:

enter image description here

Ответы [ 3 ]

6 голосов
/ 06 августа 2011

Поскольку действительные индексы варьируются от 0 до length - 1 включительно. Если вы хотите добавить символ в строку, используйте push_back

start.push_back(key[i]); //this will increase the length by 1
1 голос
/ 07 августа 2011

проходит через все элементы ключа и запускает всех уникальных участников (шифр playfair)

Вам лучше использовать std::set<char>. И вместо того, чтобы найти персонажей самостоятельно, просто используйте метод set::insert.

Позже просто используйте std::copy, чтобы скопировать содержимое set в string.

0 голосов
/ 06 августа 2011

Неправильная строка должна быть

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

Строковые индексы изменяются от 0 до (length () - 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...