删除串str中值为ch的字符

151 阅读1分钟
#include<stdio.h>
#include<stdlib.h>
typedef struct {
	char ch[10];
	int length;
}Str;

void removech(Str *str,char ch){
	int k=0,i=0;//i标记当前位置,k标记出现ch的次数
	while(str->ch[i] != '\0' && str->ch[i] != ch)	i++;//找到第一个ch则k+1
	if(i<str->length){
		k++;
		while(str->ch[++i] != '\0'){//i自加,移到ch的下一个位置
			while(str->ch[i] != '\0' && str->ch[i] != ch){
				str->ch[i-k] = str->ch[i];//前移k个位置,直到遇到下一个ch或串尾
				i++;
			}
			if(str->ch[i] == '\0') break;
			k++;
		}
	}
	str->length-=k;
	str->ch[str->length] = '\0';
}

void main()
{
	Str a={{"122325678"},9,.ch[9]='\0'};
	puts(a.ch);
	removech(&a,'2');
	puts(a.ch);
}

输出:

122325678
135678