Как мне найти символ (переменную) из строки? - PullRequest
0 голосов
/ 06 февраля 2020
cin >> letter >> position; //This is inside the main(). 

void moveLetter(char letter, int position) {`

    if (upperRowPiecesToPlay.find(letter)) {

        upperRowPiecesToPlay.replace(letter,1 , " ");

            switch(position) {

                case 1:
                    if(p1 == '.' ) {
                    p1 = letter;
                    }

                    break;

Итак, это мой код.

Я бы хотел найти символ (введенный пользователем) из заданной строки. И замените его пустым пробелом.

Однако, очевидно, я не использую функцию поиска и замены.

Пожалуйста, научите меня правильному пути ...

1 Ответ

1 голос
/ 06 февраля 2020

Вы не используете возвращаемое значение std::string::find().

std::string::find() возвращает индекс указанного символа или std::string::npos ( -1) если не найден. Он не возвращает bool, как, по-видимому, думает ваш код.

Когда вычисляется оператор if, ненулевое целочисленное значение обрабатывается как истина. Это означает, что ваш код будет пытаться выполнить upperRowPiecesToPlay.replace(), если letter найден по какому-либо индексу , кроме 0 , или вообще не найден .

Но нет перегрузки std::string::replace(), которая будет принимать letter в качестве ввода. Вместо этого вам нужно дать ему индекс, который возвращает find(), если это не npos.

Попробуйте вместо этого:

void moveLetter(char letter, int position)
{
    std::string::size_type index = upperRowPiecesToPlay.find(letter);
    if (index != std::string::npos) {
        upperRowPiecesToPlay.replace(index, 1 , " ");
        // alternatively:
        // upperRowPiecesToPlay[index] = ' ';
        ...
    }
    ...
}
...