请用c语言编写一个Squeeze函数,它的功能是删除字符串s中所出现的与变量c相同的字符。
时间: 2024-05-03 15:16:44 浏览: 13
好的,这是一个简单的C语言实现:
```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] = '\0';
}
```
这个函数的参数是一个字符数组s和一个整型变量c。它会遍历字符数组s中的每一个字符,如果字符不等于变量c,就把它加入到一个新的字符数组中。最后,把新的字符数组拷贝回原来的字符数组s中。这样,所有与变量c相同的字符就被删除了。
注意,这个函数修改了原来的字符数组s,因此调用之前需要备份原来的字符数组。
相关问题
c语言编写一个字符串整理函数void squeeze( char *str1,char *str2),该函数将str1字符串中所有在字符串str2中出现字符删除掉
好的,我来帮您编写这个函数。
函数定义如下:
```c
void squeeze(char *str1, char *str2);
```
函数参数说明:
- `str1`:要整理的字符串。
- `str2`:包含要删除的字符的字符串。
函数实现:
```c
#include <string.h>
void squeeze(char *str1, char *str2) {
char *p = str1; // p指向str1字符串中当前未删除的字符
int len = strlen(str2);
while (*p != '\0') {
if (strchr(str2, *p) == NULL) { // 如果当前字符不在str2中,则保留该字符
*str1++ = *p;
}
p++;
}
*str1 = '\0'; // 添加字符串结束标志
}
```
函数说明:
- `strchr(str2, *p)` 函数用于判断当前字符是否在 `str2` 字符串中,如果返回值为 `NULL`,则说明该字符不在 `str2` 中。
- `*str1++ = *p` 表示将指针 `p` 指向的字符复制到 `str1` 指向的位置,并将 `str1` 指针向后移动一位。
- 最后,别忘了在整理后的字符串末尾添加字符串结束标志 `\0`。
希望这个函数能够满足您的需求。
下面程序的Squeeze函数的功能是删除字符串s中所出现的与变量c相同的字符。请改正程序中的错误,使它能得出正确的结果。 #include <stdio.h> void Squeeze(char s[], char c); main() { char a[80], c; scanf("%s", a); scanf("%c", &c); Squeeze(char a[], char c); printf("%s\n", a); } void Squeeze(c
下面是修改后的程序代码:
```
#include <stdio.h>
void Squeeze(char s[], char c);
int main() {
char a[80], c;
scanf("%s", a);
scanf(" %c", &c); // 注意这里加了一个空格,以消耗掉上一个scanf留下的换行符
Squeeze(a, c); // 注意这里不需要再次声明参数类型
printf("%s\n", a);
return 0;
}
void Squeeze(char s[], char c) {
int i, j;
for (i = j = 0; s[i] != '\0'; i++) {
if (s[i] != c) {
s[j++] = s[i];
}
}
s[j] = '\0';
}
```
主要修改包括:
1. 在主函数中,修改了对Squeeze函数的调用方式,去掉了参数类型的声明,并将变量a作为参数传递进去。
2. 在主函数中,添加了一个空格,以消耗掉上一个scanf留下的换行符,避免对下一个输入造成影响。
3. 在Squeeze函数中,添加了一个变量j,用于记录新字符串的长度,并最终将其赋值为'\0',以表示字符串的结束。
4. 修改了for循环中的条件判断,将其换成判断s[i]是否等于c,以符合题目的要求。同时,将新字符串的字符从s[i]复制到s[j]中,实现删除c字符的功能。