Код который должен заменять символы, но он выдает ошибку
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)
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';
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости