#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;
}