#include <stdio.h>
int main()
{
char s[80],ch;
gets(s);
scanf("%c",&ch);
del(s,ch);
puts(s);
}
void del(char s[],char ch)
{
int i,j,len;
len=strlen(s);
for(i=0;i<len;i++)
if(ch==s[i])
for(j=i;j<len;j++)
s[j]=s[j+1];
}
这段代码的作用是删除字符串中指定字符,但是我运行的时候发现如果要删除的字符是两个连着的就只能删除一个
比如aabbcaac,输入a删除后,出来的不是bbcc而是abbcac
想问一下为什么,怎么改。谢谢大佬
void del(char s[],char ch)
{
int i,j,len;
len=strlen(s);
for(i=0;i<len;i++)
if(ch==s[i])
{
for(j=i;j<len;j++)
s[j]=s[j+1];
i--; // 删除了位置i的元素,i需要-1重新检测该位置的元素。
}
}
修改如下:
#include "stdio.h"
#include "string.h"
void del(char s[], char ch)
{
int i, j, len;
char temp[80];
len = strlen(s);
for (i = 0,j = 0; i < len; i++)
{
if (ch == s[i])
continue;
else
{
temp[j++] = s[i];
}
}
temp[j] = '\0';
strcpy(s, temp);
}
int main()
{
char s[80], ch;
gets_s(s);
scanf("%c", &ch);
del(s, ch);
puts(s);
}
不是你这样删除的,这样只是移位,你不妨想一想,假如前两个相同,第二个移位到第一个后,你又从第二个开始,所以会漏删,以此类推,你只要移位一个就会漏比较一个。
你把最后一行的s[j]=s[j+1];换成这个: s[j]='\0'; 试试