Изменить порядок слов в предложении на обратный - C (СИ)
Формулировка задачи:
ема говорит сама за себя
является строка. надо инвертировать слова копируя в другую строку.
пример:
->
я иду домой
->
домой иду я
ГЛАВНОЕ ЧТОБЫ НА ВЫХОДЕ БЫЛ СТРОКА С \ 0 В КОНЦЕ
помогите!
а то у меня получается не строка а просто вывод по частям
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define N 100 int main(void) { //clrscr(); char mas1[N]; char mas2[N]; int i, j, k, u; printf("\n\tInput sentence ->\n\n\t\t"); gets(mas1); k=strlen(mas1); u=k; printf("\n\tSentence with reverse words ->\n\n\t\t"); for (i=k; i>=0; i--) if (mas1[i]==' ') { for (j=i+1; j<=u; j++) printf("%c",mas1[j]); printf("%c",' '); u=--i; } for (i=0; i<=u; i++) printf("%c",mas1[i]); getch(); getch(); return 0; }
Решение задачи: «Изменить порядок слов в предложении на обратный»
textual
Листинг программы
#include <string.h> #include <stdlib.h> #include <stdio.h> int main() { char str[1025];//Будет содержать в себе предложение char buf[1025];//Буффер строки str char **words;//Будет содержать в себе слова из str char *tok;//Указатель на текущее слово в предложении char delim[] = " .,;!&";//Разделители между словами char chr;//Символьная переменная, для организации повторного ввода и т.д. long nCount;//nCount - будет содержать в себе число слов do { printf("Enter sentence :\n"); scanf("%[^\n]%c",str,&chr); sprintf(buf,"%s",str); tok = strtok(buf,delim);//Выделяем из строки 1-е слово nCount = 0;//Обнуляем счётчик слов while(tok) { nCount++;//Считаем слова //Продолжаем выделять из строки слова tok = strtok(NULL,delim); } if(nCount == 0) printf("Input string is empty\n"); else { nCount = 0; sprintf(buf,"%s",str); //Выделяем память на подстроки со словами из str words = (char **)malloc(nCount*sizeof(char *)); //Заново разбиваем исходную строку на слова tok = strtok(buf,delim);//Выделяем из строки 1-е слово while(tok) { //Память под подстроку со словом words[nCount] = (char *)malloc(strlen(tok)*sizeof(char)); sprintf(words[nCount],"%s",tok); //Продолжаем выделять из строки слова tok = strtok(NULL,delim); nCount++; } printf("Sentence with reverse words\n"); //А теперь выводим words в обратном порядке buf[0] = '\0';//В буф будем накапливать слова в обр порядке while(0 < (nCount--)) { //printf("%s ",words[nCount]); strcat(buf,words[nCount]); strcat(buf," "); //И удаляем память под уже не нужный нам элемент words[nCount] = (char *)realloc(words[nCount],sizeof(char *)); } //Снова уменьшаем память под 1 указатель words = (char **)realloc(words, sizeof(char *)); } printf("%s\n",buf); printf("Enter 1 for new input\n"); scanf("%d%c",&nCount,&chr); } while(nCount == 1); return 0; }
Объяснение кода листинга программы
- Ввод предложения с использованием функции scanf.
- Выделение памяти под строку предложения (str) и буфер (buf).
- Разбиение строки предложения на слова с использованием функции strtok и выделение памяти под каждое слово (words).
- Обратный порядок слов в предложении с использованием цикла while и функции realloc для освобождения памяти.
- Вывод обратного порядка слов в предложении с использованием функции printf и функции strcat для объединения слов в строку.
- Повторный ввод с использованием цикла do-while и функции scanf для ввода числа 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д