Есть структура с двумя параметрами: слово (str) и число (cnt; не спрашивайте зачем, это не важно). Создан массив этой структуры. Моя цель - поменять местами наборы (str, cnt) в этом массиве, если так окажется, что в этих наборах cnt равны, но по алфавиту один меньше другого. Как только ввожу новую char s для замены, он выдает ошибку "выражение должно быть допустимым для изменения левосторонним значением". В чем проблема?
const int WORDLEN = 80;
const int MAXWORDS = 100;
struct Elem {
char str[WORDLEN + 1];
int cnt;
};
Elem list[MAXWORDS];
int last = 0;
void Letter() {
char s[WORDLEN + 1];
for (int i = 0; i < last; i++) {
for (int j = i; j < last - 1; j++) {
if (list[i].cnt == list[j + 1].cnt) {
if (list[i].str > list[j + 1].str) {
s = list[i].str;
list[i].str = list[j + 1].str;
list[j + 1].str = s;
}
}
}
}
}
Строки, представленные как массивы char, непосредственно не копируются. Для этого следует использовать функции типа strcpy или strcpy_s.
И, кстати, для сравнения содержимого строк (а не их указателей) следует также использовать соответствующие функции - strcmp.
Во-первых, содержимое массивов в С++ никак не сравнивается простым применением оператора >, поэтому ваше наивное
if (list[i].str > list[j + 1].str)
уже бессмысленно. Никакого сравнения "по алфавиту" при этом не происходит. Если вам нужно сравнение "по алфавиту", то это либо strcmp, либо memcmp, либо сравнение вручную, в зависимости от того, что хранится в ваших массивах.
Во-вторых, голые массивы некопируемы операторами языка, о чем вам и говорит компилятор. Однако никто вам не запрещает копировать целые структуры
Elem s = list[i];
list[i] = list[j + 1];
list[j + 1] = s;
Также можно заметить, что std::swap умеет обменивать местами массивы, т.е. можно сделать просто
std::swap(list[i].str, list[j + 1].str);
В-третьих, не ясна логика работы с переменной j. Зачем везде упорно используется j + 1, когда можно было просто учесть это + 1 в заголовке цикла
for (int j = i + 1; j < last; j++)
а внутри цикла использовать просто j?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости