Написать функцию strtok вручную - C (СИ)
Формулировка задачи:
Народ, помогите плиз...
в задании надо описать функцию strtok вручную, как она по сути должна работать.
у меня вышло, что из строки, которую я ввожу он выписывает только первое слово, на остальные плюет, чего у меня не хватает? можете дополнить?
#include <stdio.h> #include <string.h> #include <conio.h> char ptr[100]; char* strtok1(char* ptr1, char* ptr2) { char s; int i=0,j=0,t=0,k=0; int is_letter = 1; memset(ptr, 0, 100); for (; *ptr1 != '\0'; ptr1++) { s=*ptr1; for (j=0;j<5;j++) { if (s!=ptr2[j] && is_letter) is_letter = 1; else is_letter = 0; } if(is_letter) { ptr[t] = s; t++; } else return ptr1+1; } return ptr1; } int main() { char ptr1[100], ptr2[6]={" .,?!"}; char* p = ptr1; puts("Enter a string:" ); gets(ptr1); p = strtok1(ptr1, ptr2); printf("%s\n", ptr, p); /*p = strtok1(p, ptr2); printf("%s \n", ptr, p); p = strtok1(p, ptr2); printf("%s \n", ptr, p);*/ return 0; while (ptr1 != '\0') { p=strtok1(p, ptr2); if (*ptr1 != '\0') { printf("%s\n", p); } else break; } getch(); return 0; }
Решение задачи: «Написать функцию strtok вручную»
textual
Листинг программы
#include <stdio.h> char * mystrchr(const char * s, const char c) { while ( *s && *s != c ) ++s; return ( *s ) ? (char*) s : NULL; } char * mystrtok(char * str, const char * delim) { static char * next; if ( str ) { next = str; while ( *next && mystrchr(delim, *next) ) *next++ = '\0'; } if ( ! *next ) return NULL; str = next; while ( *next && ! mystrchr(delim, *next) ) ++next; while ( *next && mystrchr(delim, *next) ) *next++ = '\0'; return str; } #define DELIM " \t\n" int main(void) { char buf[BUFSIZ], * p; while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' && printf("By words:\n") ) for ( p = mystrtok(buf, DELIM); p; p = mystrtok(NULL, DELIM) ) printf("%s\n", p); return 0; }
Объяснение кода листинга программы
- В функции mystrchr ищется первое вхождение символа в строке.
- В функции mystrtok реализован механизм разделения строки на токены (слова).
- Первый вызов mystrtok указывает начальную строку для разделения и строку-разделитель.
- В функции mystrtok используется статическая переменная next, которая хранит текущий индекс следующего токена в строке.
- Если разделитель не найден, то возвращается указатель на текущий токен.
- Если все токены уже обработаны, то возвращается NULL.
- В функции main происходит считывание строки с помощью fgets.
- Затем строка передается в функцию mystrtok для разделения на токены.
- Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д