Найти в строке слова, состоящие только из букв и только из цифр - 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
, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д