gpt4 book ai didi

c - 用空格分割字符串,并使用指针数组将一个单词添加到分割字符串的结果中

转载 作者:行者123 更新时间:2023-11-30 15:22:58 25 4
gpt4 key购买 nike

我的代码

void splitStr(char *str,char *strArray[]){
int i=0;
char *token;
const char s[2] = " ";
/* get the first token */
token = strtok(str, s);

/* walk through other tokens */
while( token != NULL )
{
strArray[i]=token;
token = strtok(NULL, s);
i++;
}
strArray[i]=NULL;
}


void addWord(char *strArray[],char *word){
int i;
char *token;
const char s[2] = " ";
token = strtok(word,s);
for(i = 0; strArray[i]!=NULL; i++) {
strcat(strArray[i],token);
}
for(i = 0; strArray[i]!=NULL; ++i) {
printf("%s\n",*(strArray+i));
}
}

int main(int argc, char *argv[]) {
char str[200],word[100],*spldWords[20];
int i;
printf("Enter sentence or string\n");
gets(str);
splitStr(str,spldWords);
for(i = 0; spldWords[i]!=NULL; ++i) {
printf("%s\n", spldWords[i]);
}
printf("\nEnter word\n");
gets(word);
addWord(spldWords,word);
return 0;
}

上述代码的输出:
输入句子或字符串
C 编程很有趣
C
编程

有趣

输入单词
添加
卡达德
dddd
isaddadd
ddadd

我需要这样的输出
卡德
编程添加
isadd
funadd

我正在努力解决这个程序。请任何人帮助我。
谢谢

最佳答案

您没有为 spldWords 分配任何字符串。

您将其声明为大小为 20 的 char* 数组。

然后您对其进行分配,就像这些字符串已在 splitStr 中分配一样。

在写入这些字符串之前,您需要动态分配这些字符串。

编辑:

splitStr 循环中,您尝试分配一个如下所示的字符串:strArray[i]=token; 这只会分配一个指向 希望strtok维护。您需要为字符串分配空间,然后将 token 指向的字符复制到新分配的字符串:

strArray[i] = malloc(sizeof(char) * 200);
strcpy(strArray[i], token);

在结束程序之前,任何像这样动态分配的东西都需要被释放。因此,我们需要知道 spldWords 的哪些元素已被分配。为此,我们需要将其中的所有内容初始化为 NULL,并且仅释放非 NULL 数组元素。因此,您之前像这样初始化: char* spldWords[20]; 您现在需要像这样初始化:

char* spldWords[20] = {};

最后,您需要在使用完 spldWords 后立即释放每个动态分配的元素。这样做:

for(i = 0; i < sizeof(spldWords) && spldWords[i] != NULL; ++i){
free(spldWords[i]);
}

我已将所有这些内容放入 ideone.com 供您查看(如果需要):http://ideone.com/2yYoPp

关于c - 用空格分割字符串,并使用指针数组将一个单词添加到分割字符串的结果中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28967540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com