[英]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.