繁体   English   中英

用空格分隔字符串,并使用指针数组在分隔字符串的结果中添加一个单词

[英]Split the string with white space and add one word to result of split string using pointer array

我的密码

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
程序设计

开玩笑

输入单词

Caddadd
ddadd
isaddadd
ddadd

我需要这样的输出
CADD
programmingadd
isadd
funadd

我正在努力解决该程序。 请有人帮助我。
谢谢

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

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

然后将其分配给它,就好像这些字符串已在splitStr分配splitStr

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

编辑:

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

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

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

char* spldWords[20] = {};

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

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

我已将所有这些信息放入ideone.com中,供您查看是否需要: http ://ideone.com/2yYoPp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM