pta-使用函数删除字符串中的字符

这是一个关于C语言编程的问题,要求编写一个名为delchar的函数,该函数接受一个字符串和一个字符,从字符串中删除所有出现的指定字符。在给定的示例中,展示了如何使用这个函数删除不同字符串中的特定字符。

输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一个字符串 str,再输入一个字符 c,将字符串 str 中出现的所有字符 c 删除。
要求定义并调用函数delchar(str,c), 它的功能是将字符串 str 中出现的所有 c 字符删除,函数形参str的类型是字符指针,形参c的类型是char,函数类型是void。
输入输出示例:括号内为说明,无需输入输出
输入样例:
3 (repeat=3)
happy new year (字符串"happy new year")
a (待删除的字符’a’)
bee (字符串"bee")
e (待删除的字符’e’)
111211 (字符串"111211")
1 (待删除的字符’1’)
输出样例:
result: hppy new yer (字符串"happy new year"中的字符’a’都被删除)
result: b (字符串"bee"中的字符’e’都被删除)
result: 2 (字符串"111211"中的字符’1’都被删除)

#include<stdio.h>#include<string.h> 
int main(
PTA中实现删除字符串中的子串有多种方法,以下为你介绍几种常见实现方式: #### 使用C++的`string`类的`find`和`erase`函数 ```cpp #include<bits/stdc++.h> using namespace std; int main() { string s; getline(cin, s); string s2; getline(cin, s2); int cnt = 100; while (cnt--) { int temp = s.find(s2); if (temp != s.npos) { s.erase(temp, s2.size()); } } cout << s << endl; return 0; } ``` 此方法通过`find`函数查找子串的位置,若找到则使用`erase`函数删除该子串,循环多次以确保所有子串都被删除[^1]。 #### 使用C语言的字符数组遍历 ```c #include<stdio.h> #include<string.h> int main(){ char s1[81]; char s2[81]; gets(s1); gets(s2); int len1 = strlen(s1); int len2 = strlen(s2); int flag=1; for(int i = 0;i < len1; i++) { if(s1[i]==s2[0]) { flag=1; for(int j = i; j < i+len2; j++) { if(s1[j]!=s2[j-i]) flag = 0; } if(flag) { for(int j = i; j < len1; j++) s1[j] = s1[j+len2]; i = -1; len1 -=len2; } } } puts(s1); return 0; } ``` 该方法通过遍历字符数组,当遇到与子串首字符相同的字符时,检查后续字符是否与子串匹配,若匹配则删除该子串,并从头开始重新遍历字符串[^2]。 #### 另一种使用C++的`string`类的`find`和`erase`函数的实现 ```cpp #include<iostream> #include<cstring> #include<vector> #include<algorithm> #include<stack> #include<map> #include<cmath> using namespace std; typedef long long ll; #define rep(i,m,n) for(int i=m;i<n;i++) #define rep1(i,m,n) for(int i=m;i>=n;i--) #define pb push_back int main(){ string s; getline(cin,s); string del; getline(cin,del); unsigned int n = s.find(del,0); while(n!=-1){ s.erase(n,del.length()); n = s.find(del,0); } cout << s; return 0; } ``` 此方法同样利用`find`和`erase`函数,通过循环不断查找并删除子串,直到找不到子串为止[^3]。 #### 使用C语言的`strncmp`函数 ```c #include<iostream> #include<string.h> using namespace std; int main(){ char a[100],b[1000]; cin.getline(a,100); cin.getline(b,100); int alen=strlen(a); int blen=strlen(b); int i=0,j=0; for(i=0;i<alen;i++){ if(strncmp(a+i,b,blen)==0){ for(j=i;a[j]!='\0';j++){ a[j]=a[j+blen]; } alen=strlen(a); i-=blen; } } cout<<a; } ``` 该方法使用`strncmp`函数比较字符串,若匹配则删除子串,并调整索引继续检查[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值