C ++: использование заглавной буквы с использованием другого символа - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь создать функцию, которая использует следующий символ в строке после того, как я введу символ «^». код выглядит так:

void decodeshift( string orig, string search, string replace )
{
    size_t pos = 0;

    while (true) {
    pos = orig.find(search, pos);
    if(pos == string::npos)
        break;
    orig.erase(pos, search.length());
    orig.replace(pos, search.length(), replace);

    cout<<orig<<endl;
    }
}

int main()
{
    string question = "What is the message? ";
    string answer = "The real message is ";

    string shift="^";
    string test="a";

    string answer1;

    //output decoded message
    string answer2;

    cout << question;
    cin >> answer1;
    cout << "decoding . . . " << "\n";

    //decodeback(answer1, back);
    decodeshift(answer1, shift, test);
    return 0;
}

мой ввод будет:

^hello

желаемый вывод:

Hello

токовый выход

aello

Я не могу найти правильную функцию для использования, и я запутался в том, как использовать toupper в такой ситуации. Мне просто нужно найти подходящую замену.

1 Ответ

0 голосов
/ 28 августа 2018

Попробуйте что-нибудь еще подобное:

#include <cctype>

void decodeshift( string orig, string search )
{
    size_t pos = orig.find(search);
    while (pos != string::npos)
    {
        orig.erase(pos, search.length());
        if (pos == orig.size()) break;
        orig[pos] = (char) std::toupper( (int)orig[pos] );
        pos = orig.find(search, pos + 1);
    }
    return orig;
}

...

answer1 = decodeshift(answer1, "^");
cout << answer1 << endl;

Или просто избавьтесь от параметра shift:

#include <cctype>

string decodeshift( string orig )
{
    size_t pos = orig.find('^');
    while (pos != string::npos)
    {
        orig.erase(pos, 1);
        if (pos == orig.size()) break;
        orig[pos] = (char) std::toupper( (int)orig[pos] );
        pos = orig.find('^', pos + 1);
    }
    return orig;
}

...

answer1 = decodeshift(answer1);
cout << answer1 << endl;
...