主题:为什么遇到k就把后面的都删完啦?
天天甜甜
[专家分:10] 发布于 2010-05-03 15:57:00
我希望删去一串字母中的k,程序如下:
#include <stdio.h>
void main()
{
char c;
int i;
char str[15];
printf("please input a string of words:");
scanf("%s",&str);
for(i=0;i<15;i++)
{ if((c=str[i])=='k')
str[i]='\0';
}puts(str);
}
结果却是遇到K,就把它后面的都删啦,哪里错了?
回复列表 (共8个回复)
沙发
天天甜甜 [专家分:10] 发布于 2010-05-03 16:21:00
我自己改了,如下,但是结果是删了k以后,又出现了汉字
#include <stdio.h>
void main()
{
int i;
char str[15];
printf("please input a string of words:");
scanf("%s",&str);
for(i=0;i<15;i++)
{if(str[i]=='k')
str[i]='\0';
else printf("%c",str[i]);
}
}
假如输入:abcdkklkkl
运行结果为:please input a string of words:abcdkklkk
abcdl烫烫烫
这是怎么回事?
板凳
彼岸之歌 [专家分:50] 发布于 2010-05-03 16:22:00
{
if((c=str[i])=='k')
str[i]='\0‘
}
你把k都替换成了空字符,空字符是字符串的串尾,puts函数在碰到它后,就会停止输出了,后面的当然没有了
3 楼
天天甜甜 [专家分:10] 发布于 2010-05-03 16:35:00
那修改以后的呢?用printf输出,为什么结果有汉字呢?
4 楼
彼岸之歌 [专家分:50] 发布于 2010-05-03 16:46:00
这个我也不是很懂啦···我也是菜鸟呢···
我想了一下,觉得应该是因为你输入的字符不到十四个(最后一个是串尾,所以只能输入十四个),所以后面的字符会由系统随机赋值,所以就会出现汉字吧,我在试的时候,出现了箭头,乱码什么的。我觉得应该是这样吧,
for(i=0;i<15&&str[i]!='\0';i++)
{
c=str[i];
if(c!='k') putchar(c);
}
这是我修改后的,你看一下吧,呵呵,反正我改了之后,就可以了,或者你输满十四个字符,结果也是对的,你可以试一下。
5 楼
天天甜甜 [专家分:10] 发布于 2010-05-03 16:56:00
嗯,解释乱码是对的,可是你修改的程序运行出来并没有删掉k呀?!
6 楼
彼岸之歌 [专家分:50] 发布于 2010-05-03 17:34:00
我有解释啊,你看这里
for(i=0;i<15&&str[i]!='\0';i++)
{
c=str[i];
if(c!='k') putchar(c);
}
循环体里的语句,如果c不是字符k,那么就将它输出,如果c是k的话,条件语句的条件不成立,就不会输出了······我在我自己电脑上的编译器里试过了的。
好吧,这是我修改过后的程序,你看一下
#include "stdio.h"
void main()
{
char c;
int i;
char str[15];
printf("please input a string of words:");
scanf("%s",&str);
for(i=0;i<15&&str[i]!='\0';i++)
{
c=str[i];
if(c!='k') putchar(c);
}
}
7 楼
newalice [专家分:0] 发布于 2010-05-22 15:12:00
我写了一个。根据题目是要减去‘k’那么应该是在数组上除去,不只是显示的时候不显示吧。
#include <stdio.h>
#include <string.h>
void fun(char *str,int i,int j)
{
int k;
for(k=i;k<=j;k++)
str[k]=str[k+1];
}
void main()
{
int i,j;
char str[100];
printf("please input your words:\n");
scanf("%s",str);
j = strlen(str);
for(i=0;i<j;i++)
{
if(str[i] == 'k')
{
fun(str,i,j);
i--;
j--;
}
}
printf("the result is:\n%s\n",str);
}
8 楼
NTFNTF123 [专家分:100] 发布于 2010-05-23 19:39:00
scanf("%s",&str);这个语句是错的哦!!
str已经是地址了哦
应该用scanf("%s",str);
我来回复