Замена символов в строке(c++)

631
14 июня 2018, 12:10

Код который должен заменять символы, но он выдает ошибку

const char* mess[] = { "aba" };
const char* test;
int n = strlen(mess);
for (int i = 0; i < n; i++) {
    if (mess[i] == "a") test[i] = "b";
    if (mess[i] == "b") test[i] = "a";
}

Ошибка: выражение должно быть допустимым для изменения левосторонним значением (test)

Answer 1
const char* mess[] = { "aba" };

Ну, обычный нормальный массив... Заметим - массив указателей.

const char* test;

Указатель куда-то - неизвестно куда, но на неизменяемый (константный) символ.

int n = strlen(mess);
for (int i = 0; i < n; i++) {

Ну, тут понятно - по всем символам первого элемента в массиве mess.

    if (mess[i] == "a") test[i] = "b";
    if (mess[i] == "b") test[i] = "a";

Т.е. пытаемся менять неизменяемые символы? Компилятор против. Вот если бы test был объявлен как char * test;... Правда, все равно бы не работало - присваивать символу указатель на строку все равно нельзя.

И это очень хорошо - потому что если бы он это разрешил, вашим следующим вопросом было бы "почему программа вылетает"? Кстати, вы уже поняли, почему? Причин две: выход за пределы массива mess - в нем только один элемент, а длина первого элемента - 3. А вторая - запись по случайному адресу через test.

И еще - мне думается, что вы вот тут - mess[i] == "a" - хотели проверить совсем иное. Сейчас вы проверяете, равен ли адрес, хранящийся в i-м элементе массива, адресу строки "a". Конечно, нет...

Мне кажется, что вы хотели чего-то в этом роде:

const char mess[] = "aba";
char* test = new char[strlen(mess)+1];
strcpy(test,mess);
int n = strlen(mess);
for (int i = 0; i < n; i++) 
{
    if (mess[i] == 'a') test[i] = 'b';
    if (mess[i] == 'b') test[i] = 'a';
}
READ ALSO
Загрузка файла с интернета

Загрузка файла с интернета

Хочу сделать загрузку файла по ссылке (пример - http://examplecom/test

253
Мигает в запущенном окне QEMU текст и нету текста INTERRUPT

Мигает в запущенном окне QEMU текст и нету текста INTERRUPT

Всё собрал но текст появляется и тут же пропадает и нет текста INTERRUPT в QEMU постоянно обновляется мигает в окошке в QEMU запускал на Ubuntu 1604 запускаю...

302
Архитектура ОС Линукс

Архитектура ОС Линукс

Передо мной схема ОСИду сверху вниз - Applications, System Libraries, System Call Interface etc

375
Реализация поиска простых делителей

Реализация поиска простых делителей

Всем привет, написал код по поиску простых чисел и запоминания этих чисел и их степеней:

294