Изменить порядок слов в предложении на обратный - 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;
}

Объяснение кода листинга программы

  1. Ввод предложения с использованием функции scanf.
  2. Выделение памяти под строку предложения (str) и буфер (buf).
  3. Разбиение строки предложения на слова с использованием функции strtok и выделение памяти под каждое слово (words).
  4. Обратный порядок слов в предложении с использованием цикла while и функции realloc для освобождения памяти.
  5. Вывод обратного порядка слов в предложении с использованием функции printf и функции strcat для объединения слов в строку.
  6. Повторный ввод с использованием цикла do-while и функции scanf для ввода числа 1.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.833 из 5
Похожие ответы