Найти в строке слова, состоящие только из букв и только из цифр - C (СИ)
Формулировка задачи:
Помогите новичку, прошу.
УСЛОВИЕ: Вводят строку слов. Необходимо найти слова, состоящие только из букв и только из цифр.
использую хидер-файлы для строк:
#include <string.h> (для ф-и strtok, чтобы отделять слова)
#include <ctype.h>
и ф-ю isdigit (для работы с цифрами)
и ф-ю isalpha (для работы с буквами)
Вот что получилось:
#include <string.h>
#include <stdio.h>
#include <ctype.h>
int main()
{
char str[80];
char *p;
printf("\nInput string\n");
gets(str);
int k=1;
do
{p = strtok((k?inp:NULL), " ");
k=0;
if (p)
{ printf("\n%s ",p);
isdigit (p);
isalpha(p);
}
}while(p);
getch();
return 0;
}Решение задачи: «Найти в строке слова, состоящие только из букв и только из цифр»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int is_all(const char * s, int (*f)(int)) {
return ( ! *s ) ? 1 : ( f(*s) && is_all(s + 1, f) );
}
#define DELIM " \t\n"
int main(void) {
char buf[BUFSIZ];
while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
char * p = strtok(buf, DELIM);
while ( p ) {
if ( is_all(p, isalpha) )
printf("%s - letters\n", p);
else if ( is_all(p, isdigit) )
printf("%s - digits\n", p);
p = strtok(NULL, DELIM);
}
}
return 0;
}
Объяснение кода листинга программы
В этом коде реализована функция is_all, которая принимает два аргумента: строку s и функцию f. Функция is_all возвращает 1, если все символы в строке s удовлетворяют условию, определенному функцией f, и 0 в противном случае.
Функция main считывает строку из стандартного ввода, разбивает ее на слова и проверяет каждое слово на наличие только букв или только цифр. Если слово состоит только из букв, оно выводится как letters. Если слово состоит только из цифр, оно выводится как digits.
В этом коде используются следующие функции и библиотеки:
#include <stdio.h>используется для ввода и вывода данных.#include <string.h>используется для работы со строками.#include <ctype.h>используется для проверки типа символа (буква или цифра).- Функция
is_allреализована с использованием рекурсии и принимает два аргумента: строкуsи функциюf. - В функции
mainиспользуется функцияprintfдля вывода запроса на ввод строки. - Используется функция
fgetsдля считывания строки из стандартного ввода. - Используется функция
strtokдля разбиения строки на слова. - Используется функция
isalphaдля проверки, является ли символ буквой. - Используется функция
isdigitдля проверки, является ли символ цифрой. - В конце программы возвращается
0, чтобы указать, что программа успешно завершилась.