Работа со строками - C (СИ) (70159)
Формулировка задачи:
Дан текст
1)Подчитать количество слов начинающихся с большой буквы.
2)Подсчитать количество слов, у которых первый и последний символы совпадают
3)Все пробелы заменить на тире("–")
Эксперты прошу Вашей помощи. Нужна программа на Си, которая объединяет все 3 задания
К первому заданию есть наброски
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <windows.h>
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char str[100];
int count = 0,i;
gets(str);
for(i=0;str[i];i++) {
if (isupper (str[i]));
count++;
}
printf("%d", count);
return 0;
}Решение задачи: «Работа со строками»
textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
int main()
{
char str[100];
int wordStart = -1;
int wordIndex;
int upperQnty = 0;
int eqQnty = 0;
fgets(str, 100, stdin);
for (int i = 0; str[i]; i++) {
if (str[i] == ' ')
str[i] = '-';
if (wordStart > -1) {
if (isalpha(str[i]))
wordIndex++;
else {
if (str[wordStart] == str[wordStart + wordIndex])
eqQnty++;
wordStart = -1;
}
} else if (isalpha(str[i])) {
wordStart = i;
wordIndex = 0;
if (isupper(str[i]))
upperQnty++;
}
}
if (wordStart > -1)
if (str[wordStart] == str[wordStart + wordIndex])
eqQnty++;
printf("Кол-во слов начинающихся с большой буквы: %d\n", upperQnty);
printf("Кол-во слов с одинаковыми символами на конце: %d\n", eqQnty);
printf("Итоговая строка: %s\n", str);
return 0;
}
Объяснение кода листинга программы
- В начале программы подключаются две библиотеки: stdio.h и ctype.h. Библиотека stdio.h нужна для ввода-вывода данных, а ctype.h содержит функции для работы со строками.
- Затем определена переменная str типа char, которая является массивом символов. Его размер составляет 100 символов.
- Три переменные типа int: wordStart, wordIndex и eqQnty инициализируются значением -1. Переменная upperQnty инициализируется значением 0.
- Далее с помощью функции fgets() в массив str записывается строка, введенная пользователем.
- Затем в цикле перебираются все символы строки. Если текущий символ является пробелом, то он заменяется на символ
-. - Если текущий символ не является первым символом строки и переменная wordStart не равна -1, то проверяется, является ли текущий символ буквой. Если это так, то увеличивается значение переменной wordIndex. Если текущий символ не является буквой, то проверяется, равен ли символ на позиции wordStart и wordIndex + 1. Если это так, то увеличивается значение переменной eqQnty. Затем переменная wordStart устанавливается в -1. Если текущий символ является первым символом строки, то устанавливается значение переменной wordStart и wordIndex, и если текущий символ является большой буквой, то увеличивается значение переменной upperQnty.
- Если значение переменной wordStart не равно -1 после цикла, то проверяется равенство символов на позиции wordStart и wordIndex + 1.
- Выводятся значения переменных upperQnty и eqQnty.
- Выводится итоговая строка, которая является входной строкой с замещенными пробелами на символ
-. - Программа возвращает 0, что означает успешное завершение работы.