Не меняются местами слова в строке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В задании требуется поменять местами первое и последние слова.
#include <stdio.h>
#include <stdlib.h>
#define N 100
 
int main(void)
{
    char str[N], A[N], B[N];
    int i, n, x, j;
    gets (str);
    x=0;
    for (i=0 ; i<N ; i++)
        if (str[i]==' ')
        {
            x++;
            if (x==1)
                for (n=i ; n>=0 ; n--)
                    A[n]=str[n];
        }
    x=0;
    j=0;
    for (i=N ; i>0 ; i--)
        if (str[i]==' ')
        {
            x++;
            if (x==1)
                for (n=i+1 ; n<N ; n++)
                {
                    B[j]=str[n];
                    j++;
                }
        }
    for (i=0 ; i<N ; i++)
        if (str[i]==' ')
        {
            x++;
            if (x==1)
                for (n=i ; n>=0 ; n--)
                    str[n]=B[n];
        }
    j=0;
    for (i=N ; i>0 ; i--)
        if (str[i]==' ')
        {
            x++;
            if (x==1)
                for (n=i ; n>=0 ; n--)
                {
                    str[n]=A[j];
                    j++;
                }
        }
    puts (A);
    puts (B);
    puts (str);
    system("PAUSE");
    return 0;
}

Решение задачи: «Не меняются местами слова в строке»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main(void)
{
    const int N = 100;
    char str[N], first[N], mid[N], last[N];
    int i = 0, len, first_len, last_len;
    gets(str);
    len = strlen(str);
    for (i=0; i<len; i++)
        if (str[i]==' ')
            break;
    strncpy(first, str, i);
    first[i] = '\0';
    first_len = strlen(first);
    for (i = len-1; i>=0; i--)
        if (str[i]==' ')
            break;
    i++;
    strncpy(last, str+i, len-i);
    last[len-i] = '\0';
    last_len = strlen(last);
    strncpy(mid, str+first_len, len - first_len - last_len);
    mid[len-first_len-last_len] = '\0';
    strcpy(str,last);
    strcat(str,mid);
    strcat(str,first);
    puts(str);
    system("PAUSE");
    return 0;
}

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

  1. Подключение необходимых библиотек
  2. Объявление переменных:
    • — const int N = 100;
    • — char str[N], first[N], mid[N], last[N];
    • — int i = 0, len, first_len, last_len;
  3. Считывание строки в переменную str с помощью функции gets()
  4. Вычисление длины строки с помощью функции strlen()
  5. Формирование подстрок:
    • — первая подстрока first: копирование символов из строки str до первого пробела с помощью функции strncpy()
    • — последняя подстрока last: копирование символов из строки str после последнего пробела с помощью функции strncpy()
    • — средняя подстрока mid: копирование символов из строки str между первой и последней подстроками с помощью функции strncpy()
  6. Удаление первых и последних пробелов в подстроках first и last с помощью функции strim()
  7. Конкатенация подстрок first, mid и last в переменную str с помощью функций strcat()
  8. Вывод полученной строки на экран с помощью функции puts()
  9. Ожидание нажатия клавиши с помощью функции system()
  10. Возврат 0, т.е. успешный исход выполнения программы

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


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

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

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