Другие языки программирования и технологии

Совет по программе на языке си (строки)

Подскажите, пожалуйста =)
У меня есть вот такая задача:
В записке слова зашифрованы - каждое из них написано наоборот. Расшифровать сообщение.

У меня пока в голове крутится только то что мне нужно будет посчитать кол-во слов в предложении и каждое слово перевернуть. . Но каким образом пока додуматься не могу. Был вариант, что можно бы было зацепиться как-то за пробелы между словами. . Но может быть можно как-то ещё? Заранее спасибо за советы =)
#include <stdio.h>
#include <ctype.h>

int main() {
char note[666], *i = note, *b, *e;
int iw = 0;
printf("строка\n? ");
fgets(note, 666, stdin);
printf("\nрезультат\n: ");
for (; *i; ++i) {
if (!iw) {
if (isspace(*i) || ispunct(*i)) {
putchar(*i);
} else {
b = i;
iw = 1;
}
} else if (iw && (isspace(*i) || ispunct(*i))) {
for (e = i; --e >= b;) putchar(*e);
putchar(*i);
iw = 0;
}
}
puts("\nнажмите ввод");
getchar();
}

Виктор Сергеевич
Виктор Сергеевич
70 056
Лучший ответ
А длина слова не наводит на мысли?
Пробелы не важны, тебе надо найти начало и конец слова:
Если начало еще не найдено и символ цифры или буквы, то это начало слова.

Иначе Если еще конец не найден и это последний символ в строке или не последний, но следующий идет не цифра и не буквы, то это конец слова.

Потом когда нашел начало и конец слова, то надо перевернуть и после начало и конец снова допустим присвоить -1 как признак еще не найденного.

А переворачивание у тебя код был вроде, меняешь 1 с последним, 2 с предпоследним и тд от начала до конца слова.
Маха4 Маха4 Может я ошибаюсь, но пробелы то как раз важны, ибо они служат индикатором, ориентиром - то, что это не слово. А как только встречается символ (букв. или цифр. неважно) , то это НАЧАЛО перевернутого слова. Далее, до первого попавшегося пробела (это будет индикатором конца перевернутого слова).
Хы, так если заранее известно, что слова перевернуты, не легче ли просто считывать весь док-т с конца до начала и записывать слова в массив?
Мыслить надо от простого к сложному, задавая себе последовательно вопросы:
1. Правильно ли будет ничего не выдавать, если исходная записка пустая?
2. Если в записке только одно слово, то вроде нужно прочитать его с конца, и это правильный ответ?
3. Если в записке 2 слова, то каждое из них я уже умею дешифровать (см. 2), а какое из двух выводить первым?
4. Если я не знаю, сколько в записке слов, получиться ли у меня выделить и дешифровать первое из них, а потом дешифровать остаток? Или нужно сначала дешифровать последнее?

Основной принцип структурного программирования - разбиение задачи на простые блоки, потом повторяющиеся блоки вынести в функции.

Функцией будет блок "дешифровать и вывести слово" с параметрами (начало_слова, конец_слова) .
Блоками:
- "проверка оставшейся длины записи"
- "выделить следующее слово"

Соединив всё вместе, получим программу.
Данил Рыжков
Данил Рыжков
11 112