/* 删除字符串中的字符。输入一个字符串s,再输入一个字符c,将字符串s中出现的所有字符c删除。要求定义并调用函数delchar(s,c),它的功能是将字符串s中出现的所有c字符删除。
【运行时的输入输出样例】
Input a string:happy new year
Input a char:a
After deleted,the string is:hppy new yer
*/
#include<stdio.h>
#include<string.h>
int main (void)
{
void delchar(char s[], char c);
char str[100];
char c;
int i=0;
printf("Input a string:");
while((str[i]=getchar())!='\n')
i++;
str[i]='\0';
printf("Input a char:");
scanf("%c",&c);
delchar(str,c);
printf("After deleted,the string is:");
printf("%s",str);
return 0;
}
void delchar(char s[], char c)
{
char *p,*q;
int i=strlen(s);
for(p=s;p<s+i;p++)
{
if(*p==c)
{
q=p;
for(i--;p<s+i;p++) //进行覆盖
*p=*p+1;
p=q--;
}
}
}
结果不对, 到底错在哪?
c语言中书写删除字符串中某个字符的程序的具体操作步骤如下:
1、编写头函数,包括“#include <stdio.h>.”与“#include <string.h>.“。
2、定义两个相同容量的字符串储存的变量 char a【100】; char b【100】。以及整数变量 int c;int i=0,j=0;其中a[100]是存字符串的,b【100】是存你删除对应字符的字符串的,整数C是想删除第几位。j ,i 是后面for循坏中要使用到的变量。
3、编写printf(“请输入你的字符串”);scanf(“%s”,a);printf(“请输入你想要删除第几位字符”);scanf(“%d”,&c)。
这几行代码主要是显示界面,以及具体想要删除什么字符串以及具体删除第几位字符使用的。
4、继续编写for(i=0;i<strlen(a);i++) ( if(i+1!=c){ b【j】=a【i】; j++;)( printf(" %s",b);)。
这几行代码逻辑语句是:只要当i+1不等于c时把a【i】里面的字符赋给b【i】,那么这样当i+1=c时不把它赋给b【i】从而实现删除功能。
5、程序编辑完毕,可以进行删除字符了。
改了之后结果 是这个 为什么后面会重复为sdd 而不是 sd?
我知道了 for(p=s;p<=s+i;p++) //这里改为<=
{
if(*p==c)
{
q=p;
for(i--;p<=s+i;p++) //这里改为<=
*p=*p+1;
p=q--;
}
}
这样结果就对了 要不然 没有把‘\0’覆盖