以指针的方式,将某个字符串中出现的特定字符删去,然后输出新的字符串。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。
每组测试数据输入一个字符串s和一个非空格字符t。其中s的长度不超过100,且只包含英文字母。
输出格式:
对于每组测试,将删掉t后新得到的字串输出。如果串被删空,则输出
NULL
。
输入样例:
2
eeidliecielpvu i
ecdssnepffnofdoenci e
输出样例:
eedlecelpvu
cdssnpffnofdonci
思路:本题可以分别定义两个char*类型的指针p1,p2指向原字符串s然后用p1指针去遍历s字符串。
当还没有指向要删除的字符串时,则将p1所指向的内容复制给p2,注意此时p2指针要向下移动一个位置;
当遇到要删除的字符时,只需将dlen加1。
#include<stdio.h>
#include<string.h>
int main()
{
int n;
scanf("%d", &n);
getchar();//吸收回车
char s[100];
char t;
while(n--)//多次输入
{
scanf("%s %c", s, &t);
char* p1 = s;
char* p2 = s;
int dlen = 0;//dlen为删掉的字符数
int len = strlen(s);//len为字符串s的长度
while(*p1 != '\0')//用p1指正去遍历其指向的s数组
{
if(*p1 != t)
{
*p2 = *p1;
p2++;
}
else//p1所指向的字符是要删除的字符时
{
dlen++;
}
p1++;
}
*p2 = *p1;//这里是将最后p1所指向的'\0'赋值给p2
if(dlen >= len)//删除的字符数大于等于原字符串长度
{
printf("NULL\n");
}
else
{
printf("%s\n", s);
}
}
return 0;
}
标签:p2,字符,p1,dlen,PTA,char,字符串
From: https://blog.csdn.net/weixin_44190161/article/details/137028283