Обработка строк: определиния упорядоченности слов лексикографически, замена букв, поиск и вывод самого длинного слова. - C (СИ)
Формулировка задачи:
Помогите, пожалуйста решить задачу на C:
Дан текст.
1) Определить, упорядочены ли лексикографически слова данного предложения (следуют ли в алфавитном порядке).
2) Заменить все буквы «А» на буквы «а».
3) Вывести на экран самое длинное слово.
Я попытался выполнить пункт два, но программа работает некорректно. На счёт же первого и третьего пункта я нахожусь в полном неведении. Также я не уверен в правильности подхода к решению задачи.
Заранее благодарен за помощь.
П.С. Буду искренне рад, если сможете еще и объяснить, как решается задача, а также посоветовать, где можно почитать про строки.
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define N 256
int main()
{
char st[N];
int i;
puts("Vvedite tekst:");
gets(st);
for(i=0;i=N;i++)
if(st[i]='a') st[i]='A';
printf("\n%s",st);
getch();
return 0;
}Решение задачи: «Обработка строк: определиния упорядоченности слов лексикографически, замена букв, поиск и вывод самого длинного слова.»
textual
Листинг программы
#include <cstdlib>
#include <iostream>
#include <cstring>
int main(int argc, char *argv[])
{
char str[100];
char *p;
int mas[50];
int j=0, k=0;
for(int i=0; i<50; i++) mas[i] = 0;
std::cout << "enter text: ";
std::cin.getline(str, 100);
p = strtok(str, " ,.!?:");
while(p != NULL)
{
mas[j] = p[0];
j++;
k++;
p=strtok(NULL, " ,.!?:");
}
int flag=1;
for(int i=0; i<k-1; i++)
{
if(mas[i+1] < mas[i])
{
flag=0;
break;
}
}
if(flag) std::cout << "True!\n";
else std::cout << "False!\n";
std::cout << "\n";
system("PAUSE");
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с C++
- Объявление переменных: — str — массив символов для ввода текста — p — указатель на текущий символ в массиве str — mas — массив для хранения первых букв каждого слова — j — счётчик заполненных элементов массива mas — k — счётчик слов в введенной строке
- Ввод текста с помощью функции std::cin.getline
- Разделение введенной строки на слова с помощью функции strtok
- Заполнение массива mas первыми буквами каждого слова
- Установка флага=1
- Проверка упорядоченности массива mas с помощью цикла for и условием if
- Если флаг=0, то вывод False, иначе вывод True
- Вывод сообщения об успешном выполнении программы
- Ожидание нажатия клавиши с помощью функции system(
PAUSE) - Возвращение значения EXIT_SUCCESS, указывающего на успешный конец работы программы