/***********************
函数的用途是:删除指定的字符
返回值是:删除后的字符串长度
str是被删除字符
ch是指定要删除的字符
***********************/
int str_sc( char * str, char * ch) //str是被删除字符串,ch是指定要删除的字符串
{ //返回值为删除后str长度,-1为出现未知错误
int n = 0, m = 0; //n为str现阶段处理位,m是辅助ch进行对比操作
int b = 0, y, x;//
//事先准备
if( *ch != '\0') {
do
{ m++; }
while( *(ch+m) != '\0'); }
else { //检查ch 是否为空
printf("ch为null -1\n");
return -1; }
y = m;
if( *str != '\0') { //检查str是否为空
do
{ n++; }
while( *(str+n) != '\0');
x = n;
if( y > n) {
printf("ch长度大于str长度,比较无意义 0\n");
return 0; }
}
else {
printf("str为null -1\n");
return -1; }
//主逻辑区
n = 0;
do { //进行第一位对比,相同深入对比,不同n++对比下一位
for( m = 0; (*(ch+m) != '\0') && (*(str+n) == *(ch+m)); n++, m++)
; //对比后续字符是否相同
if( m == y) //根据m的值,确定匹配到一个ch
b = b + m;
else if( (m > 0) && (m < y)) //匹配失败
n = n - m + 1; //还原继续匹配
else if(m == 0)
n++;
else{
printf("出现未知错误 -1\n");
return -1; }
if((n-b) != n)
str[n-b] = str[n]; //进行移动
if( *(str+n) == '\0') {
*(str+n-b) = '\0';
return n-b; } }
while(n <= x);
return -1;
}
/****************************************
现在想到的函数漏洞有:
没有检测 ch 和 str 中是否存在'/0'的对应代码 要是传入的字符串没有'\0' 那结果酸爽
不知道大家除了传入字符串长度的这个方法外,有没有能在内部解决这个问题的方法?
****************************************/