В строке, содержащей несколько слов, разделенных пробелом, перевернуть каждое слово - C (СИ) (72709)
Формулировка задачи:
В строке, содержащей несколько слов, разделенных пробелом, перевернуть каждое слово.
Входные данные:
abcde fghik lmnop
Выходные данные:
edcba kihgf ponml
есть код это прги на паскале, если надо могу скинуть
можно сделать в java но тогда с объяснением(не знаю java) Решение задачи: «В строке, содержащей несколько слов, разделенных пробелом, перевернуть каждое слово»
textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
void swap(char* a, char* b) {
char t = *a;
*a = *b;
*b = t;
}
void reverse(char* begin, char* end) {
while (begin < end) {
swap(begin++, end--);
}
}
int getWord(char* str, char** begin, char** end) {
for (; *str && !isalpha(*str); ++str) { ; }
*begin = str;
for (; *str && isalpha(*str); ++str) { ; }
*end = str;
return *end - *begin;
}
char* reverseWords(char* str) {
char* p = str;
char* begin, * end;
while (getWord(p, &begin, &end) > 0) {
reverse(begin, end - 1);
p = end;
}
return str;
}
int main() {
char text[] = "abcde fghik lmnop";
printf("%s\n", reverseWords(text));
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяются две функции:
swapиreverse, которые меняют местами два указателя на символы и переворачивают строку соответственно - В функции
getWordищется граница слова в строке, в которую заводятся два указателя:beginна первый символ слова иendна последний символ слова - В функции
reverseWordsищется начало и конец каждого слова в строке, затем вызывается функцияreverseдля переворота каждого слова - В функции
mainсоздаётся тестовая строка и вызывается функцияreverseWords, которая переворачивает слова в строке и выводит результат - Возвращаемое значение функции
reverseWordsне используется