c语言字符数组中删除一个字符
#include<stdio.h>intmain(void){intn,j;chari[10];charc;for(n=0;n<10;n++)scanf("%c",&i[...
#include <stdio.h>
int main(void)
{
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]);
return 0;
}
输入十个字符,再删除其中与我输入那个字符相同的的字符,不知道为什么我写的这个一直就是删除最后一个字符,求大神看下 展开
int main(void)
{
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]);
return 0;
}
输入十个字符,再删除其中与我输入那个字符相同的的字符,不知道为什么我写的这个一直就是删除最后一个字符,求大神看下 展开
7个回答
展开全部
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 <stdio.h>
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 <stdio.h>
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<j;n++)
printf("%c",a[n]);
return 0;
}
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 <stdio.h>
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 <stdio.h>
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<j;n++)
printf("%c",a[n]);
return 0;
}
更多追问追答
追问
我们还没学到指针来,主要是这个问题。
追答
#include
int main(void)
{
int n,j=0;
int count=0;//用来记录除去c还剩下多少个数,然后存在a数组里面
char i[10],a[10];
char c;
for(n=0;n<10;n++)
scanf("%c",&i[n]);
scanf("%c",&c);
for(j=0;j<=9;j++)
{
if(i[j]==c)
continue;//如果i[j]==c则不做这次循环后面的部分,然后j++,进行下次循环
else
a[count++]=i[j];
}
for(n=0;n<count;n++)//打印
printf("%c",a[n]);
return 0;
}
————————————————————————
这个没用指针,指针可是c语言精髓,要好好学习哦~
而且数组越界是一个十分常见的错误,很多黑客都是根据这个漏洞进行攻击~所以一定要认真谨慎~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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]);
}
来不及去运行了,你运行看看 应该没问题!
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]);
}
来不及去运行了,你运行看看 应该没问题!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <stdlib.h>
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了,你可以改回来一样的,我是为了方便调试
更多追问追答
追问
键盘缓冲区是什么东西啊?能够解释下吗,老师提了下,但是还是不是很懂。
还有个问题,我没有直接做循环,我先让i[n]=i[n+1],为什么是错误的,我觉得我逻辑是对了的啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
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]);
}
输入这个试试
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]);
}
输入这个试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询