Напишите программу, которая переворачивает все слова в строке - C (СИ)

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

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

Добрый день. Проблема в том, что программа проходит успешно только 8 из 14 тестов - в остальных пишет "ошибка выполнения". Мне посоветовали сделать массив глобальным. Но я только начала учить Си, так что понятия не имею что это. Объясните, пожалуйста, что и где нужно дописать, чтобы сделать массив глобальным и что это вообще значит. Большое спасибо. Текст задания: Напишите программу, которая переворачивает все слова в строке. Символы, отличные от латинских букв должны остаться на месте. Вводится одна строка, завершающаяся символом конца строки '\n'. Длина строки менее 1000. Моя программа:
Листинг программы
  1. #include<stdio.h>
  2. #include<string.h>
  3. //#include<conio.h>
  4. int main()
  5. {char p[1100],*h;
  6. int i,g,n,u,c,k,v;
  7. u=0;i=0;n=0;c=0;k=0;
  8. gets(p);
  9. u=strlen(p);
  10. while(i<u)
  11. {if(p[i]==' ' || p[i] < 65 || (p[i] > 90 && p[i]< 97) || p[i]> 122 )
  12. {k=n;
  13. while(k<=(n+((i-n)/2))-1)
  14. {c=p[k];p[k]=p[i-1+n-k];
  15. p[i-1+n-k]=c;k=k+1;
  16. }
  17. n=i+1;i++;
  18. }
  19. else
  20. i=i+1;
  21. }k=n;
  22. while(k<=(n+(u-n)/2)-1)
  23. {c=p[k];p[k]=p[u-1+n-k];
  24. p[u-1+n-k]=c;k++;
  25. }
  26. for(h=p;*h<=u;h++)
  27. printf("",&h);
  28. puts(p);
  29. //getch();
  30. return 0;
  31. }
Сейчас попробовала объявить массив как unsigned char - программа прошла на 2 теста больше, чем в прошлый раз, но в остальных по-прежнему ошибка выполнения.

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main()
  6. {
  7.    char p[1100], *h;
  8.    int i = 0, n = 0, u = 0, c = 0, k = 0;
  9.  
  10.    gets(p);
  11.    u = strlen(p);
  12.    while (i < u)
  13.    {
  14.       if (p[i] == ' ' || p[i] < 65 || (p[i] > 90 && p[i] < 97) || p[i] > 122)
  15.       {
  16.          k = n;
  17.          while (k <= (n + ((i - n) / 2)) - 1)
  18.          {
  19.             c = p[k];
  20.             p[k] = p[i - 1 + n - k];
  21.             p[i - 1 + n - k] = c;
  22.             k++;
  23.          }
  24.          n = i + 1;
  25.       }
  26.       i++;
  27.    }
  28.    k = n;
  29.    while (k <= (n + (u - n) / 2) - 1)
  30.    {
  31.       c = p[k];
  32.       p[k] = p[u - 1 + n - k];
  33.       p[u - 1 + n - k] = c;
  34.       k++;
  35.    }
  36.  
  37.    for (h = p; *h; h++)
  38.    {
  39.       printf("%c", *h);
  40.    }
  41.    printf("\n");
  42.  
  43.    system("pause");
  44.  
  45.    return 0;
  46. }

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

  1. Ввод строки с помощью функции gets(p).
  2. Определение длины строки с помощью функции strlen(p) и сохранение ее в переменную u.
  3. Перебор всех символов строки с помощью цикла while (i < u).
  4. Проверка условия для каждого симвома:
    • Если символ является пробелом, переворачивание слов не требуется.
    • Если символ является буквой верхнего регистра, переворачивание слов не требуется.
    • Если символ является буквой нижнего регистра, переворачивание слов не требуется.
    • Если символ является любым другим символом, происходит переворачивание слов.
  5. Переворачивание слов происходит с помощью двух вложенных циклов while:
    • Внешний цикл для перебора символов от начала строки до текущего символа (n).
    • Внутренний цикл для перебора символов от k до (n + ((i - n) / 2)) - 1, где k - это индекс первого символа слова, которое нужно перевернуть.
    • Перестановка символов в слове с помощью временной переменной c.
    • Обновление индексов для следующего символа внешнего цикла.
  6. После завершения внешнего цикла, переворачивание слов происходит с помощью двух вложенных циклов while:
    • Внешний цикл для перебора символов от начала строки до половины длины строки (n + (u - n) / 2) - 1.
    • Внутренний цикл для перестановки символов в словах, которые были перевернуты в предыдущем цикле.
  7. Вывод перевернутой строки с помощью цикла for и функции printf.
  8. Ожидание нажатия клавиши с помощью функции system(pause).
  9. Возврат 0, что означает успешное выполнение программы.

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


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

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

13   голосов , оценка 4.077 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы