C语言练习-从字符串中删除出现的所有字符c

#include<stdio.h>

// 从字符串 s 中删除出现的所有字符 c
void squeeze(char s[], int c) {
    int i, j;

    for (i = j = 0; s[i] != '\0'; i++) {
        if (s[i] != c) {
            s[j++] = s[i];/* 相当于s[j] = s[i];j++; j增加1,为符合下个位置的字符做好新的存储准备*/
        }                    /* 将字符串s[i]未遇到c的部分赋值给s[j],j++重新在新的位置等待符合条件的字符*/
    }
        s[j] = '\0';  // 注意:这里要手动添加字符串结束符
}

int main() {
    int c = 'c';
    char n[] = "abcd";
    squeeze(n, c);
    printf("%s\n", n);
    return 0;
}

首先,需要写主函数main,定义删除操作的字符“c”,再定义执行的字符串“abcd”,调用将要写的自定义函数squeeze,输出打印操作后的字符n。%s输出字符串,%d输出整数,%c输出单个字符。

定义squeeze函数(操作字符串,删除的字符c),定义i,j,for循环字符串s[i] 不等于结束符为循环条件,然后  if 判断语句s[i] !=c ,将满足要求的字符串赋值给s[j],s[j]++

最后手动添加字符串结束符。

重新编写函数squeeze(s1,s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除

#include<stdio.h>
#include<string.h>

void RemoveMatchedChars(char* s1, char* s2) {
	int i, j, k;
	int len1 = strlen(s1);//这行代码使用c语言标准库中的strlen函数来获取字符串s1的长度,并将这个长度值存储在变量len1中
	int len2 = strlen(s2);
	for (i = 0; i < len1; i++) {    //遍历字符串s1的每个字符
		for (j = 0; j < len2; j++) {   //对于s1中的每个字符,遍历字符串s2的每个字符
			if (s1[i] == s2[j]) {      //如果s1中的当前字符与s2中的某个字符相同
				for (k = i; k < len1 - 1; k++) { //将s1中该字符及其后面的字符向前移动一位
					s1[k] = s1[k + 1];
				}
				len1--;//s1的有效长度减1
				i--;   //因为字符向前移动了,所以当前位置要重新检查
				break; //找到匹配后就退出s2的循环
			}
		}
	}
	s1[len1] = '\0';//在处理后的字符串末尾添加字符串结束标志

}
int main() {
	char s1[] = "hello world"; //定义并初始化字符串s1
	char s2[] = "lo";          //定义并初始化字符串s2
	printf("原始字符串s1:%s\n",s1); //输出原始的s1
	RemoveMatchedChars(s1, s2);      //调用函数处理s1
	printf("处理后的字符串s1:%s\n",s1);  //输出处理后的s1
	return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值