c语言字符数组中删除一个字符

2025-02-25 22:09:50
推荐回答(5个)
回答1:

字符数组中删除指定字符的方法:

  • 输入一个字符串,以回车结束

  • 输入指定字符

  • 定义一个遍历字符串的下标变量和一个新的字符串下标变量

  • 循环遍历字符串,

    • 如果当前字符与指定字符不同,则将当前字符写入新下标位置,新下标+1 (相同则不处理)

    • 遍历下标+1检测下一个

    • 遇到字符串结束符,结束循环

  • 循环结束后,新下标位置字符串结束符

  • 输出新的字符串

参考代码:

回答2:

1、输入部分scanf("%c",&c);紧挨着循环部分,所以你输入完第10个字符,第11个字符就是指定字符c,很有可能是空格。。。。。需要优化

2、for(j=n+1;j<10;j++)
{
i[j]=i[j+1];
}
这个部分当j=9时候会产生数组越界i[10];干扰你后面的答案;(你这个思路需要考虑十分周全,所以建议使用指针)
3、for(n=0;n<9;n++)

输出部分,循环不一定是循环9次,万一是有两个字符和规定字符相同呢?
——————————————————————————
用指针打印相对简单一点
#include
int main(void)
{
int n;
char i[10],*p;
char c;
for(n=0;n<10;n++)
scanf("%c",&i[n]);
scanf("%c",&c);
p=i;
for(p;p<=&i[9];p++)
if(*p!=c)
printf("%c",*p);
return 0;
}

——————————————————————————————
保存到另一个数组的方法
#include
int main(void)
{
int n,j=0;
char i[10],*p,a[10]={0};
char c;
for(n=0;n<10;n++)
scanf("%c",&i[n]);
scanf("%c",&c);
p=i;
for(p;p<=&i[9];p++)
{
if(*p==c)
continue;
else
a[j++]=*p;
}
for(n=0;n printf("%c",a[n]);

return 0;
}

回答3:

#include "stdio.h"
main()
{
int i,a[10];
char n;
for(i=0;i<10;i++)
scanf("%d",a[i]);
printf("请输入一个字符");
scanf("%c",&c);
for(i=0;i<10;i++)
{
if(a[i]==c)
{
for(j=i+1;j<10;j++)
a[j-i-1]=a[j];
a[j-1]='\0'
}
break;
}
for(i=0;i<9;i++)
printf("%d",a[i]);
}

来不及去运行了,你运行看看 应该没问题!

回答4:

#include 
#include 
int main(void){ 
 int n,j; 
 int i[10]; 
 int c; 
 for( n=0; n<10; n++)  {
  //C语言清除键盘输入缓冲区,下面两个方法都可以
  //fflush(stdin);
  rewind(stdin); 
  printf("i[%d]=", n);
  scanf("%d",&i[n]);
 }
 fflush(stdin);
 scanf("%d",&c); 
 for(n=0;n<10;n++) {  
  if(i[n]==c)  {   
   //直接做循环即可,这两个地方有问题
   for(j=n;j<10;j++)   {       
    i[j]=i[j+1];
   }  
  } 
 } 
 for(n=0;n<10;n++) printf("i[%d]=%d\n",n,i[n]); 
 
 system("pause");
 return 0;
}

根本原因是因为标准输入缓存区没有清除的缘故,赋值直接就有问题,我把char改成int了,你可以改回来一样的,我是为了方便调试

回答5:

#include
void main()
{
int n,j;
char i[10];
char c;
for(n=0;n<10;n++)
scanf("%c",&i[n]);
scanf(" %c",&c);
for(n=0;n<10;n++)
{
if(i[n]==c)
{
i[n]=i[n+1];
for(j=n+1;j<10;j++)
{
i[j]=i[j+1];
}
}
}
for(n=0;n<9;n++)
printf("%c",i[n]);

}
输入这个试试