C语言-删除字符串中的字符。

/* 删除字符串中的字符。输入一个字符串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、程序编辑完毕,可以进行删除字符了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-20
在你的delchar()函数里面,进行覆盖那里应该改成 *p = *(p+1) 如果是*p = *p + 1结果是 先取出 p指向的内存中的字符,然后该字符加1之后再赋值给p所指向的内存。 列入 *p = a; 那*p = *p +1 结果是 *p = b; 而*p = *(p + 1) 是p指针先指向p前面的一个内存单元,再用*取出该内存单元的值,然后赋值给 p 所指向的内存单元 *p追问

改了之后结果 是这个 为什么后面会重复为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’覆盖

本回答被提问者采纳
第2个回答  推荐于2017-10-06
我用数组给你写了个新的
#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';
gets(str);
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)
{
int length=strlen(s);

for (int i = 0; i < length; ++i)
{
if (s[i] == c)
{
for (int j = i; j < length; ++j)
{
s[j]= s[j+1];
}
}
}
}
第3个回答  2012-05-20
#include <stdio.h>
#include <string.h>
void delchar(char *p,char ch)
{
char *pch;
while (*p!='\0')
{
if (*p==ch) //相同时
{
for (pch=p;*pch!='\0';pch++) //字符前移
*pch=*(pch+1);
}
p++;
}
}
void main()
{
char a[100];
char ch;
printf("请输入字符串:");
gets(a);
printf("请输入你要删除的字符:");
scanf("%c",&ch);
delchar(a,ch);
printf("删除字符后的字符串:%s\n",a);
}
第4个回答  2012-05-20
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--;
}
}
中*p=*(p+1);。
相似回答