C:将字符串数组分成单个单词

时间:2017-11-26 11:56:53

标签: c arrays string pointers matrix

我有一个充满句子的数组,我的数组声明如下

char *arraystr[size];

由一个strtok填充,将一个字符串分成不同的句子并填充它。

arraystr[0]="In which class are you studying";

arraystr[1]="I am in Eighth Standard";

我想逐字逐句地分隔句子,并将其存储在数组或矩阵中。像这样:

single_words[0]="In"

single_words[1]="wich"

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);
}

1 个答案:

答案 0 :(得分:0)

我发现您的代码存在一些问题。在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,并且重新使用相同变量来表示不同内容的方式是值得怀疑的会让你自己迷惑另外,请考虑不在函数参数中将数组大小作为副作用返回。