s****n 发帖数: 1237 | 1 在练习一道面试题
Implement an algorithm int removeDuplicate(char[] s)
For instance change ”abbcccdda” to “abcda” and return 4(the number of
characters deleted).
我自己写了一个
int removeDuplicateString(char str[]){
int count = 0;
int pos = 0;
char *c = str;
while(*c){
if(*c == *(c+1)){ count+=1;}
else{str[pos]=*c; pos++;}
c++;
}
str[pos]='\0';
return count;
}
但是调用的时候
char string[] = "ccc"; int n = |
t****t 发帖数: 6806 | 2 上个月刚有人问过. 答案是在函数内不可能判断; 把字符串常量给一个const char*就
不会出现这样的问题了, 因为用const char*不能调用你写的这个函数.
【在 s****n 的大作中提到】 : 在练习一道面试题 : Implement an algorithm int removeDuplicate(char[] s) : For instance change ”abbcccdda” to “abcda” and return 4(the number of : characters deleted). : 我自己写了一个 : int removeDuplicateString(char str[]){ : int count = 0; : int pos = 0; : char *c = str; : while(*c){
|
r****t 发帖数: 10904 | |
z***9 发帖数: 696 | 4 string2 points to a read-only data segment, you cannot modify it. |
s****n 发帖数: 1237 | 5 got it. thx
【在 t****t 的大作中提到】 : 上个月刚有人问过. 答案是在函数内不可能判断; 把字符串常量给一个const char*就 : 不会出现这样的问题了, 因为用const char*不能调用你写的这个函数.
|
X****r 发帖数: 3557 | 6 你这个程序还有一些可改进的地方:
1)count是不需要的,最后两个指针的差就是要返回的结果。
2)对于函数参数来说,char str[]和char *差别不大,
你这种情况用后者更方便,可以不用pos。
int removeDuplicateString(char* str){
char *c;
for(c = str; *c; c++)
if(*c != *(c+1)) *str++=*c;
*str = '\0';
return c - str;
}
就我个人而言会把*(c+1)写成c[1],不过这个就见仁见智了。
【在 s****n 的大作中提到】 : got it. thx
|