好的,所以我有一个代码可以去除字符串中的重复字符, 基于 here .好的,我修改成这样:
void rem_dup(char str[]){
int char_check=0;
int i,j;
char ch;
char filterstr[256]; /* store the temporary strings */
/* check from 1st character in the string */
while(str[char_check]) {
ch = str[char_check];
i = j = char_check+1;
filterstr[0] = str[0]; // added
/* logic to remove the repeated character */
while(str[i]) {
if(str[i] != ch) {
filterstr[j] = str[i]; //modifid
j++;
}
i++;
}
filterstr[j]='\0'; //modified
str = filterstr; //added
char_check++;
}
printf("String after removing duplicates : %s\n",str); this
}
我通过一个简单的脚本实现了这一点
int main(){
char Q[20];
char E[26];
fgets(Q,sizeof(Q),stdin);
fgets(E,sizeof(E),stdin);
rem_dup(Q);
rem_dup(E);
printf("\n%s\n%s\n",Q,E);
return 0;
}
我期待这样的输出
0101010101
ababababab
String after removing duplicates : 01
String after removing duplicates : ab
01
ab
但是输出会变成这样
0101010101
ababababab
String after removing duplicates : 01
String after removing duplicates : ab
0101010101
ababababab
如您所见,实际情况是 Q 和 E 根本没有修整。如果数组参数是传引用参数,我怎么会发生这种事??任何人都有答案吗?我搜索了很多资源并尝试了这个唯一的问题,但总是失败。感谢您的回答或只是提供意见。
最佳答案
线
str = filterstr;
没有按照您的意愿行事。该代码只是将指针的本地副本更改为缓冲区。它不会更改缓冲区的内容。
你需要打电话
strcpy(str, filestr);
就在函数返回之前,即您的 printf
现在所在的位置。
看看你的逻辑,我相信它会因为更复杂的输入而失败。我不会尝试为您调试它,因为我不能 100% 确定您希望代码做什么。
关于c - 传递 char[] 参数根本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7669856/