Курсовая работа: Построитель вопросительных предложений
4. увеличиваем счетчик слов на 1 и добавляем полученное слово в массив;
5. если исходная строка не закончилась, переходим к шагу 2, иначе заканчиваем работу.
Данному алгоритму соответствует нижеприведенная программа:
char res[20]; // Буфер для хранения слова
char *tmp; // Ссылка на исходную строку
int words(){
char *r;
memset(res,0,20); // Обнуление буфера слова
r=res;
if(*tmp==0)return 0; // Если исходная строка пуста или закончилась, выход из подпрограммы
while(*tmp==' '||*tmp=='\t')tmp++; // Пропуск пробелов
if(islower(*tmp)||isupper(*tmp)) // Если рассматриваемый символ буква…
{
while(islower(*tmp)||isupper(*tmp))*r++=*tmp++; // Добавляем к буферу слова очередной символ, если он буква
tmp++;
}
return 1;
}
Функция words() возвращает в качестве результата два значения: 1 и 0. 1 возвращается в том случае, когда найдено слово. Если же просмотр строки закончился или строка изначально была пуста, возвращается 0. Поэтому данная функция должна вызываться в цикле вида :
while(words()!=0){
arr[i]=(word *)calloc(1,sizeof(word)); // Добавление новой записи в массив
memset(arr[i]->wrd,0,20);
strcpy(arr[i]->wrd,res); // Запись результата работы функции в массив
i++; // Увеличение количества найденых слов
}
Так как мы рассматриваем только простые предложения и предполагаем, что числительные и порядковые пишутся словами, то функция words() не учитывает знаки препинания и цифры.
После выделения слов в предложении идет этап анализа полученных результатов. То есть, для каждого слова создается список его параметров (часть речи, падеж, род, число и т.д.), которые хранятся в структуре вида:
struct word{
char wrd[20]; //слово