Удалить из предложения все слова с нечетными номерами и перевернуть слова с четными номерами - C (СИ)
Формулировка задачи:
/*Всем Доброго дня помогите переписать код из си++ в си
(Отредактировать заданное предложение,
удаляя из него все слова с нечетными номерами и
переворачивая слова с четными номерами.)*/
#include <iostream>
#include <vector>
#include <sstream>
#include <algorithm>
int main(int argc, char* argv[])
{
setlocale(LC_ALL, "Rus");
std::vector<std::string> arr;
std::string str;
std::string word;
int i = 0;
std::cout << "Введите предложение.." << std::endl;
std::getline(std::cin, str);
std::stringstream data(str);
while(std::getline(data,word,' '))
{
if(i++ % 2 == 0)
{
std::reverse(word.begin(), word.end());
arr.push_back(word);
}
}
for (std::vector<std::string>::iterator iter = arr.begin(); iter < arr.end(); ++iter)
std::cout << *iter << std::endl;
return 0;
}Решение задачи: «Удалить из предложения все слова с нечетными номерами и перевернуть слова с четными номерами»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define DELIM " \n.,?!';:-"
//Отредактировать заданное предложение,удаляя из него все слова с нечетными номерами и
//переворачивая слова с четными номерами.
int main()
{
char s[128], *p;
int i = 0, n, len;
puts("Enter line:");
fgets(s, 128, stdin);
for(n = 1,p = strtok(s, DELIM); p; p = strtok(NULL, DELIM), n++){
if(n % 2 == 0){
for(len = strlen(p); len > 0; len--,i++)
s[i] = p[len - 1];
s[i] = ' ';
i++;
}
}
s[i] = '\0';
puts(s);
return 0;
}
Объяснение кода листинга программы
В этом коде программа запрашивает у пользователя строку и затем обрабатывает её, удаляя все слова с нечетными номерами и переворачивая слова с четными номерами. Вот список действий, которые происходят в коде:
- Ввод строки от пользователя.
- Выделение отдельных слов из строки. Это делается с помощью функции
strtok, которая разбивает строку на слова, используя указанный разделитель (в данном случае пробел и знаки препинания). Каждое слово помечается как нечетное или четное с помощью переменнойn. - Переворот четных слов. Если номер слова четный, то программа переворачивает его, двигаясь от последнего символа к первому.
- Удаление нечетных слов. Если номер слова нечетный, то программа удаляет его из строки.
- Объединение обработанных слов обратно в строку. После обработки всех слов, программа объединяет их обратно в строку, добавляя пробелы между словами.
- Вывод обработанной строки.
Список переменных:
s- массив символов, в котором хранится исходная строка.p- указатель на текущее слово.n- переменная, которая отслеживает номер текущего слова.len- переменная, которая хранит длину текущего слова.i- переменная, которая отслеживает индекс последнего добавленного слова в итоговую строку.