c语言编写一个字符串整理函数void squeeze( char *str1,char *str2),该函数将str1字符串中所有在字符串str2中出现字符删除掉
时间: 2024-02-15 19:02:03 浏览: 136
好的,我来帮您编写这个函数。
函数定义如下:
```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`。
希望这个函数能够满足您的需求。
相关问题
编写一个字符串函数void squeeze(char str1[],char str2[]),该函数将str1字符串中所有在字符串str2中出现的字符删掉,如char s1[20]="THISISABOOK",s2[5]="IS",则调用函数后,s1="THABOOK"。
以下是squeeze函数的实现代码:
```c
void squeeze(char str1[], char str2[]) {
int i, j, k;
int len1 = strlen(str1);
int len2 = strlen(str2);
for (i = j = 0; i < len1; i++) {
for (k = 0; k < len2; k++) {
if (str1[i] == str2[k]) {
break;
}
}
if (k == len2) {
str1[j++] = str1[i];
}
}
str1[j] = '\0';
}
```
函数中使用了两个循环,第一个循环遍历字符串str1,并准备删除str2中包含的字符。第二个循环遍历字符串str2,检查str1中的字符是否在str2中出现。如果str1[i]等于str2[k],则跳出循环并不将该字符拷贝到新的字符串中。最终结果就是将str1中所有在str2中出现的字符删除。
用字符指针作函数参数编程实现如下功能:在字符串中删除与某字符相同的字符。 **输入格式要求:"%s" 输入提示信息: "Input a string:" "Input a character:" **输出格式要求:"Results:%s\n" 程序运行示例1如下: Input a string:hello,world! Input a character:o Results:hell,wrld! 请按如下框架编程: #include <stdio.h> #include <string.h> #define N 100 void Squeeze(char *s, char c); int main() { char str[20], ch; printf("Input a string:"); gets(str); printf("Input a character:"); ch = getchar(); ...... printf("Results:%s\n", str); return 0; } void Squeeze(char *s, char c) { ...... }
完整代码如下:
```
#include <stdio.h>
#include <string.h>
#define N 100
void Squeeze(char *s, char c);
int main()
{
char str[N], ch;
printf("Input a string:");
gets(str);
printf("Input a character:");
ch = getchar();
Squeeze(str, ch);
printf("Results:%s\n", str);
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';
}
```
函数`Squeeze`实现了删除字符串中与指定字符相同的字符。具体实现方法是,从头到尾遍历字符串`s`,如果当前字符不是指定的字符`c`,则将该字符存入`s`的另一个空间,最后在新的字符串末尾加上`\0`表示字符串结束。
阅读全文