Напишите программу, которая переворачивает все слова в строке - C (СИ)
Формулировка задачи:
Добрый день.
Проблема в том, что программа проходит успешно только 8 из 14 тестов - в остальных пишет "ошибка выполнения". Мне посоветовали сделать массив глобальным. Но я только начала учить Си, так что понятия не имею что это. Объясните, пожалуйста, что и где нужно дописать, чтобы сделать массив глобальным и что это вообще значит. Большое спасибо.
Текст задания:
Напишите программу, которая переворачивает все слова в строке. Символы, отличные от латинских букв должны остаться на месте.
Вводится одна строка, завершающаяся символом конца строки '\n'. Длина строки менее 1000.
Моя программа:
#include<stdio.h> #include<string.h> //#include<conio.h> int main() {char p[1100],*h; int i,g,n,u,c,k,v; u=0;i=0;n=0;c=0;k=0; gets(p); u=strlen(p); while(i<u) {if(p[i]==' ' || p[i] < 65 || (p[i] > 90 && p[i]< 97) || p[i]> 122 ) {k=n; while(k<=(n+((i-n)/2))-1) {c=p[k];p[k]=p[i-1+n-k]; p[i-1+n-k]=c;k=k+1; } n=i+1;i++; } else i=i+1; }k=n; while(k<=(n+(u-n)/2)-1) {c=p[k];p[k]=p[u-1+n-k]; p[u-1+n-k]=c;k++; } for(h=p;*h<=u;h++) printf("",&h); puts(p); //getch(); return 0; }
Сейчас попробовала объявить массив как unsigned char - программа прошла на 2 теста больше, чем в прошлый раз, но в остальных по-прежнему ошибка выполнения.
Решение задачи: «Напишите программу, которая переворачивает все слова в строке»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char p[1100], *h; int i = 0, n = 0, u = 0, c = 0, k = 0; gets(p); u = strlen(p); while (i < u) { if (p[i] == ' ' || p[i] < 65 || (p[i] > 90 && p[i] < 97) || p[i] > 122) { k = n; while (k <= (n + ((i - n) / 2)) - 1) { c = p[k]; p[k] = p[i - 1 + n - k]; p[i - 1 + n - k] = c; k++; } n = i + 1; } i++; } k = n; while (k <= (n + (u - n) / 2) - 1) { c = p[k]; p[k] = p[u - 1 + n - k]; p[u - 1 + n - k] = c; k++; } for (h = p; *h; h++) { printf("%c", *h); } printf("\n"); system("pause"); return 0; }
Объяснение кода листинга программы
- Ввод строки с помощью функции gets(p).
- Определение длины строки с помощью функции strlen(p) и сохранение ее в переменную u.
- Перебор всех символов строки с помощью цикла while (i < u).
- Проверка условия для каждого симвома:
- Если символ является пробелом, переворачивание слов не требуется.
- Если символ является буквой верхнего регистра, переворачивание слов не требуется.
- Если символ является буквой нижнего регистра, переворачивание слов не требуется.
- Если символ является любым другим символом, происходит переворачивание слов.
- Переворачивание слов происходит с помощью двух вложенных циклов while:
- Внешний цикл для перебора символов от начала строки до текущего символа (n).
- Внутренний цикл для перебора символов от k до (n + ((i - n) / 2)) - 1, где k - это индекс первого символа слова, которое нужно перевернуть.
- Перестановка символов в слове с помощью временной переменной c.
- Обновление индексов для следующего символа внешнего цикла.
- После завершения внешнего цикла, переворачивание слов происходит с помощью двух вложенных циклов while:
- Внешний цикл для перебора символов от начала строки до половины длины строки (n + (u - n) / 2) - 1.
- Внутренний цикл для перестановки символов в словах, которые были перевернуты в предыдущем цикле.
- Вывод перевернутой строки с помощью цикла for и функции printf.
- Ожидание нажатия клавиши с помощью функции system(
pause
). - Возврат 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д