Замена символов в строке

Greg, а как должна работать твоя программа, если ей ввести «Юлия» вместо избитого «Иванов Иван Иваныч»?

Фтьiкай, должна выдать Впмг

Greg, а как должна работать твоя программа, если ей ввести «Юлия»
вместо избитого «Иванов Иван Иваныч»?

Подскажите,пожалуйста, что не так.

Greg, все не так! Самое «не так» — это присваивание вместо сравнения в операторе if (name1[i] = alfa[j]) и выход за пределы массива в alfa[j + 4].

Я немножко подкорректировал твою программку:

#include <iostream>
#include <cstring>
#include <Windows.h>

using namespace std;

const char abc[] = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
const char abcCaps[] = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";

const size_t SHIFT = 4;

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);

    char str[80];
    char *cur;
    size_t abc_len = strlen(abc);

    do
    {
        cout << "Введите строку: ";
        cin.getline(&str[0], 80);

        cur = str;
        while (*cur)
        {
            for (size_t i = 0; i < abc_len; i++)
            {
                if (*cur == abc[i])
                {
                    *cur = i + SHIFT < abc_len ? abc[i + SHIFT] : abc[(i + SHIFT) % abc_len];
                    break;
                }
                if (*cur == abcCaps[i])
                {
                    *cur = i + SHIFT < abc_len ? abcCaps[i + SHIFT] : abcCaps[(i + SHIFT) % abc_len];
                    break;
                }
            }
            cur++;
        }
        cout << str << endl;
    } while (true);

    return 0;
}

Хм... Пока писал ответ, исчез вопрос.
Чудны дела твои, Господи!

&str[0]

Для тех, кто так пишет, в аду недавно установлен отдельный котёл))

Фтьiкай, функция-член data для этого имеется. А еще, до c++11 std::string не обязан был хранить символы последовательно в одном куске памяти :)

Но ведь это не std::string... Или я чего-то не понимаю?

Это я тупанул, прошу прощения :)

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.