Напечатать все слова из текстового файла, состоящие только из латинских букв - C (СИ)
Формулировка задачи:
Напечатать все слова из текстового файла, состоящие только из латинских букв
Как изменить условие в функции Count, чтобы программа не печатала слова, содержащие цифры?
#define DELIMITERS ".,:;?!\n\t"
#define N 1024
int Count(char *s)
{
int i,count;
for(i=count=0;s[i]!='\0';i++)
{
if (isalpha(s[i]))
count++;
}
return count;
}
int ReadWords(char *fname)
{
FILE *f;
char s[N],*word;
int i,j,flag[256]={0};
if ((f=fopen(fname, "r"))==NULL)
return 1;
for(i=0;DELIMITERS[i];i++)
flag [DELIMITERS[i]]=1;
while (fgets(s,N,f)!=NULL)
{
for(i=0;s[i]&&flag[s[i]];i++)
;
while(s[i])
{
word=s+i;
while(s[i]&&!flag[s[i]])
i++;
j=i;
while (s[i]&&flag[s[i]])
i++;
s[j]='\0';
if (Count(word))
puts(word);
}
}
fclose(f);
return 0;
}
int main()
{
ReadWords("d:\\a.txt");
return 0;
}Решение задачи: «Напечатать все слова из текстового файла, состоящие только из латинских букв»
textual
Листинг программы
#include <stdlib.h>
bool f(char *s)
{
while(*s)
if (!isalpha(*s++))
return false;
return true;
}
Объяснение кода листинга программы
В данном коде:
- Подключается стандартная библиотека C stdlib.h.
- Определяется функция f, которая принимает в качестве аргумента указатель на строку (char *s).
- В функции происходит проверка каждого символа строки на принадлежность к классу букв (isalpha). Если символ не является буквой, то функция возвращает false. Если все символы строки являются буквами, то функция возвращает true.
- В тело функции помещён цикл while, который выполняется до тех пор, пока не будет достигнут конец строки (указатель на '\0').
- Если символ не является буквой, то функция возвращает false и прерывает выполнение.
- Если все символы строки являются буквами, то функция возвращает true.