Не присваивается значение элементу массива char** - C (СИ)
Формулировка задачи:
int n=0; char* tok=NULL; tok=strtok(str," .,:;!?-"); while(tok) { tok=strtok(NULL," .,:;!?-"); n++; } tok=NULL; char** tokk=new char*[n]; tok=strtok(str," .,:;!?-"); int a=0; tokk[a]=tok; while(tok) { a++; tok=strtok(NULL," .,:;!?-"); cout<<tok<<" "; } printf("%s",tokk[n]); for(int i=0;i<n;i++) { printf("%s\t",tokk[i]); }
Решение задачи: «Не присваивается значение элементу массива char**»
textual
Листинг программы
char* str1=new char[sLen]; char* str2=new char[sLen]; str1=strncat(str1,str,sLen-1); str2=strncat(str1,str,sLen-1); int n=0; char* tok=NULL; tok=strtok(str1," .,:;!?-"); while(tok) { tok=strtok(NULL," .,:;!?-"); n++; } tok=NULL; char** tokk=new char*[n]; tok=strtok(str2," .,:;!?-"); int a=0; tokk[a]=tok; while(tok) { a++; tok=strtok(NULL," .,:;!?-"); cout<<tok<<" "; } printf("%s",tokk[n]); for(int i=0;i<n;i++) { printf("%s\t",tokk[i]); }
Объяснение кода листинга программы
В этом коде:
- Создаются два массива символов (строки) с помощью оператора new, их размер равен sLen.
- С помощью функции strncat к первому массиву (str1) добавляется содержимое второго массива (str), при этом в первом массиве добавляется только sLen-1 символов, чтобы избежать выхода за границы массива.
- С помощью функции strtok начинается разбиение строки (str1) на токены (слова) по пробелам, точкам, запятым, двоеточиям, точкам с запятой, восклицательным и вопросительным знакам, тире и дефисам.
- В цикле while сохраняются найденные токены в массив tokk.
- После окончания цикла while, при условии, что не было найдено ни одного токена, строка str2 также разбивается на токены.
- В цикле while выводятся найденные токены.
- После окончания цикла while выводится последний найденный токен.
- Выводится весь массив tokk.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д