[问题描述]
去掉一个字符串中给定的字符
ex.
给定字符串
abcdeghijkffffdadfdavgrartewafdeaweahragrfa
去掉字符串中的'f';
[问题分析]
这个问题很简单,解决的方法也很多,可以遍历字符串,然后把不是给定字符串的字符拷贝到一个保存空间;也可以在原字符串上进行修改,遍历字符串,遇到指定字符,则循环移动后面的字符。不过这两种方法无疑牺牲了空间或者时间,那么从下面角度考虑一下
遍历字符串,遇到指定字符,进行标记,然后再次遍历移动字符串,这样耗费的时间复杂度为O(2n),控制在O(n),空间复杂度为O(n);
下面给出具体实现:
#include
#include
void delchar(char *, char, int);
int main(){
char str[80] = "abcdeghijkffffdadfdavgrartewafdeaweahragrfa";
char del = 'f';
printf("%s,%d\n", str,strlen(str));
delchar(str, del, strlen(str));
printf("%s,%d\n", str,strlen(str));
return 0;
}
void delchar(char *str, char del, int n)
{
int i=0,j=0;
for(;i
str[i]='0';
i=0;
while(1)
{
if(j>=n)
break;
while(j++
i--,j--;
printf("%d<-%d\t",i,j);
str[i++]=str[j];
str[j]='0';
}
}
结果为:
mifei@P-I-mi:~/C$ ./a.out
abcdeghijkffffdadfdavgrartewafdeaweahragrfa,43
10<-14 11<-15 12<-16 13<-18 14<-19 15<-20 16<-21 17<-22 18<-23 19<-24 20<-25 21<-26 22<-27 23<-28 24<-30 25<-31 26<-32 27<-33 28<-34 29<-35 30<-36 31<-37 32<-38 33<-39 34<-40 35<-42 36<-43 abcdeghijkdaddavgrartewadeaweahragra,36
C AND C++ 一个在给定字符串中去掉指定字符的函数的实现
标签:
C AND C++
Subscribe to:
Post Comments (Atom)
0 评论:
Post a Comment