Не присваивается значение элементу массива 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.