我有一个数组,里面装满了句子,我的数组是这样声明的
char *arraystr[size];
And由一个strtok填充,将一个字符串分成不同的句子并填充它。
arraystr[0]="In which class are you studying";
arraystr[1]="I am in Eighth Standard";
我想把句子逐字分开,存入数组或者矩阵中。像这样:
single_words[0]="In"
single_words[1]="which"
single_words[2]="class"
//...
我已经做到了,但是当没有什么可以分离的时候我遇到了崩溃,我猜它不知道什么时候停止。
我的代码:
void str_array_line(char str[],int *size,char* arraystr[])
{
char *token = strtok(str, "?.!\n");
int i=0;
while(token!=NULL)
{
arraystr[i] = malloc(strlen(token) + 1);
strcpy(arraystr[i], token);
//printf("Array[%d][%s]\n",i, arraystr[i]);
token = strtok(NULL, "?.!\n");
i++;
*size=i;
}
}
void array_single_words(char *arraystr[],char* single_words[])
{
int i=0,j=0;
for(j=0;j<strlen(arraystr[j]);j++)
{
char *token = strtok(arraystr[j], " \t");
while(token!=NULL)
{
single_words[i] = malloc(strlen(token) + 1);;
strcpy(single_words[i], token);
printf("Array[%d][%s]\n",i, single_words[i]);
token = strtok(NULL, " \t");
i++;
}
}
}
int main()
{
char str[]="In which class are you studying?Sandhiya : I am in Eighth Standard. What about you?Saniya : I am in Ninth Standard\nSandhiya : Do you come to school by bus?\nSaniya : Yes. I travel by bus. I have to catch Route No 24 bus.\nSandhiya : It has passed on just 15 minutes before.";
int size=sizeof(str);
int i=0;
char *arraystr[size];
str_array_line(str,&size,arraystr);
printf("Size: %d\n",size);
char *single_words[255];
array_single_words(arraystr,single_words);
}
我看到你的代码有几个问题。在
array_single_words
中,您正在遍历所有句子。所以j
循环必须遍历arraystr[]
数组中的句子数。
代替
for(j=0;j<strlen(arraystr[j]);j++)
你应该写
for(j=0;j<size;j++)
快速修复,因为在
str_array_line
的早期运行中,您将 size
设置为数组中的元素数。
话虽这么说,
malloc
数组的第一个 arraystr
的大小不应该是 size
,并且您重复使用同一个变量来表示不同事物的方式是有问题的,并且会让自己感到困惑。另外,考虑不要将数组大小作为函数参数中的副作用返回。