Как заменить один символ типа «А» на что-то вроде «10»? - PullRequest
0 голосов
/ 29 апреля 2018
#include <iostream>
#include <string>
using namespace std;

int main () 
{
    string s;
    cin >> s;
    for (int i = 0; i < s.size (); i++)
    {
        if (s[i] == 'A')
        {
            s[i] = "10";
        }
        cout << s[i];
    }
    return 0;
}

Я получаю следующую ошибку:

main.cpp: In function
'int main()': main.cpp:10:5: error: invalid conversion from 'const char*' to 'char' [-fpermissive]  s[i]= "10";

Любая помощь будет принята с благодарностью. Спасибо.

Ответы [ 4 ]

0 голосов
/ 29 апреля 2018

Здесь вы заменяете символ «А» на строку «10», поэтому вы получаете эту ошибку. После нахождения «А» вы должны стереть один символ «А», а затем добавить два символа «10». Есть много способов сделать это. один простой способ - взять новую временную строку и скопировать всю строку в этой новой строке тем до «A». После получения «A» добавьте нужные символы в этот темп, а затем скопируйте оставшуюся строку в этом.

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s, temp;
    cin >> s;
    for (int i = 0, j = 0; i < s.length(); i++) {
        if (s[i] == 'A') {
            temp[j++] = '1';
            cout << temp[j - 1];
            temp[j++] = '0';
            cout << temp[j - 1];
        }
        else {
            temp[j++] = s[i];
            cout << temp[j - 1];
        }
    }
    return 0;
}
0 голосов
/ 29 апреля 2018

почему бы не использовать string::find() для поиска символа, который вы хотите заменить, а затем от string::insert до вставить a "10"? может быть, не лучшим способом, но может закончить его правильно.

Ваш кодовый вопрос в том, что operator[] из std::string возвращает char&, и вы не можете присвоить string literal ему.

И я думаю, что я должен дать вам функцию для ее реализации.

void Process(std::string& op)
{
    auto pos=op.find('A');
    op.erase(pos,1);
    if(pos!=std::string::npos)
    {
        op.insert(pos,"10");
    }
}
0 голосов
/ 29 апреля 2018

Вы можете найти позицию A, начиная с индекса 0 до конца строки, и всякий раз, когда вы найдете, replace это с 10, используя информацию как позиции, где вы нашли, так и длины строки Вы хотели бы найти в данной строке.

Примерно так: https://www.ideone.com/dYvF8d

#include <iostream>
#include <string>

int main()
{
    std::string str;
    std::cin >> str;

    std::string findA = "A";
    std::string replaceWith = "10";

    size_t pos = 0;
    while ((pos = str.find(findA, pos)) != std::string::npos)
    {
        str.replace(pos, findA.length(), replaceWith);
        pos += replaceWith.length();
    }

    std::cout << str << std::endl;
    return 0;
}
0 голосов
/ 29 апреля 2018

Проблема состоит в том, что вы помещаете 2 символа в один пробел , вы видите, что A - это один символ типа char и хранится в виде 8 байтов. Где «10» рассматривается как массив символов, который имеет 3 символа 1, 0 и \0 (нулевой символ). Поэтому заменить «А» на «10» так, как вы это делали, невозможно.

Что вы можете сделать:

if (s[i] == 'A') {
    s[i] = '1';
    s += '*'; // to add a single char onto the end.
    for (int j = s.size(); j > i; --j)
        s[j] = s[j - 1];
    s[++i] = '0';
}

И чтобы распечатать его, сделайте следующее:

std::cout << s;

или

std::cout << s[i] << s[i + 1];

Опять же, поставив std::cout << s[i], вы выводите один символ.

EDIT: За @ RemyLebeau вы можете использовать strreplace ()

if (s[i] == 'A') {
    s.replace(i, 1, "10");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...