Переписть программу без использования функции strtok - C (СИ)
Формулировка задачи:
Нужно переписть программу без использования функции strtok,
ну или пояснить какого типа переменная "P":
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int test(char * buf, int size){
- char * head, * tail;
- for ( head = buf, tail = buf + size - 1; head < tail; ++head, --tail )
- if ( *head != *tail )
- return 0;
- return 1;
- }
- #define DELIM " \t\n,.:;!?"
- int main(void){
- char buf[BUFSIZ], * p;
- printf("String: ");
- if ( ! fgets(buf, BUFSIZ, stdin) ){
- perror("fgets");
- exit(1);
- }
- for ( p = strtok(buf, DELIM); p; p = strtok(NULL, DELIM) )
- if ( test(p, strlen(p)) )
- printf("%s\n", p);
- exit(0);
- }
Решение задачи: «Переписть программу без использования функции strtok»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int test(char * buf, int size){
- char * head, * tail;
- for ( head = buf, tail = buf + size - 1; head < tail; ++head, --tail )
- if ( *head != *tail )
- return 0;
- return 1;
- }
- #define DELIM " \t\n,.:;!?"
- int main(void){
- char buf[BUFSIZ], tmp[BUFSIZ], * pHead, * pTail;
- printf("String: ");
- if ( ! fgets(buf, BUFSIZ, stdin) ){
- perror("fgets");
- exit(1);
- }
- pHead = buf;
- while ( 1 ){
- while ( strchr(DELIM, *pHead) )
- ++pHead;
- if ( ! ( pTail = strpbrk(pHead, DELIM) ) ){
- if ( test(pHead, strlen(pHead)) )
- printf("%s\n", pHead);
- break;
- }
- else {
- if ( test(pHead, pTail - pHead) ){
- strncpy(tmp, pHead, pTail - pHead);
- tmp[pTail - pHead] = 0;
- printf("%s\n", tmp);
- }
- pHead = pTail;
- }
- }
- return 0;
- }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: stdio.h, stdlib.h, string.h
- Определяется функция test, которая принимает два аргумента: buf и size. Функция проверяет, являются ли все символы в строке одинаковыми. Если это так, функция возвращает 1, в противном случае - 0.
- В функции main считывается строка из стандартного ввода с помощью функции fgets.
- Создаются две переменные: pHead и pTail. Переменная pHead указывает на начало строки, а pTail - на ее конец.
- В цикле while считываются символы строки до тех пор, пока не будет найден разделитель или не будет достигнут конец строки.
- Если найден разделитель, то проверяется, является ли подстрока между pHead и pTail уникальной. Если это так, то подстрока выводится на экран.
- Если подстрока не является уникальной, то считываются следующие символы до тех пор, пока не будет найден следующий разделитель.
- Если подстрока является уникальной, то она копируется в другую строку (tmp), и эта строка выводится на экран.
- Цикл while продолжается до тех пор, пока не будет достигнут конец строки.
- Функция main возвращает 0, что означает успешное завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д