Помогите перевернуть второе предложение на си
Нужно поменять местами слова в предложениях например: "Мама мыла пол. Папа читал газету." на "пол мыла Мама. газету читала Папа.", с перемещением слов в одном предложении справился, с несколькими не получается
#include <stdio.h>
#include <locale.h>
#include <Windows.h>
void reverse(char* begin, char* end) {
char temp;
while (begin < end) {
temp = *begin;
*begin++ = *end;
*end-- = temp;
}
}
void reverseWords(char* s) {
char* word_begin = s;
char* temp = s;
int x = 1;
while (x == 1) {
temp++;
if (*temp == ' ') { // если пробел
reverse(word_begin, temp - 1); // перевернуть слово до пробела
word_begin = temp + 1; // перейти к следующему слову
}
else if (*temp == '.') { // если конец строки
reverse(word_begin, temp-1); // перевернуть последнее слово
temp+=4;
reverse(s, temp-5); // перевернуть всю строку
temp-=2;
puts(temp);
x = 0;
}
}
}
int main() {
//system("chcp 65001");
setlocale(LC_ALL, "rus");
SetConsoleCP(1251); // включить кодировку Win1251 при вводе с консоли
SetConsoleOutputCP(1251); // включить кодировку Win1251 при выводе на консоли
char s[] = "Мама мыла пол. Папа читал газету.";
reverseWords(s); // перевернуть слова в предложении
//printf("%s\n", s); // напечатать результат
puts(s);
return 0;
}
Ответы (1 шт):
Автор решения: Данил Елашкин
→ Ссылка
Вот решение.
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <locale.h>
void reverse(char* begin, char* end) {
char temp;
while (begin < end) {
temp = *begin;
*begin++ = *end;
*end-- = temp;
}
}
void reverseWords(char* s) {
char* word_begin = s;
char* temp = s;
int x = 1;
while (x == 1) {
temp++;
if (*temp == ' ') { // если пробел
reverse(word_begin, temp - 1); // перевернуть слово до пробела
word_begin = temp + 1; // перейти к следующему слову
}
else if (*temp == '\0') { // если конец строки
reverse(word_begin, temp-1); // перевернуть последнее слово
reverse(s, temp-1); // перевернуть всю строку
x = 0;
}
}
}
// Функция, которая разбивает текст на предложения по точке
void split_by_dot(char *text) {
// Инициализируем указатель на начало предложения
char *sentence = text;
// Ищем точку в тексте
char *dot = strchr(text, '.');
// Пока есть точка в тексте
while (dot != NULL) {
// Заменяем точку на нулевой символ для завершения строки
*dot = '\0';
// Выводим предложение на экран
reverseWords(sentence);
printf("%s. ",sentence);
// Перемещаем указатель на начало следующего предложения
sentence = dot + 1;
// Ищем следующую точку в тексте
dot = strchr(sentence, '.');
}
// Выводим последнее предложение на экран, если оно не пустое
if (*sentence != '\0') {
printf("%s.", sentence);
}
}
// Пример использования функции
int main() {
setlocale(LC_ALL, "rus");
SetConsoleCP(1251); // включить кодировку Win1251 при вводе с консоли
SetConsoleOutputCP(1251); // включить кодировку Win1251 при выводе на консоли
// Объявляем и инициализируем текст
char text[] = "Мама мыла пол.Папа читал газету.";
// Вызываем функцию для разбиения текста на предложения по точке
split_by_dot(text);
// Возвращаем нулевой код завершения программы
return 0;
}