回 帖 发 新 帖 刷新版面

主题:为什么遇到k就把后面的都删完啦?

我希望删去一串字母中的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个回复)

沙发


我自己改了,如下,但是结果是删了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烫烫烫

这是怎么回事?





板凳

{
    if((c=str[i])=='k')
    str[i]='\0‘
    }
你把k都替换成了空字符,空字符是字符串的串尾,puts函数在碰到它后,就会停止输出了,后面的当然没有了

3 楼


那修改以后的呢?用printf输出,为什么结果有汉字呢?

4 楼


这个我也不是很懂啦···我也是菜鸟呢···
我想了一下,觉得应该是因为你输入的字符不到十四个(最后一个是串尾,所以只能输入十四个),所以后面的字符会由系统随机赋值,所以就会出现汉字吧,我在试的时候,出现了箭头,乱码什么的。我觉得应该是这样吧,
    for(i=0;i<15&&str[i]!='\0';i++)
    {   
        c=str[i];
        if(c!='k') putchar(c);
    }
这是我修改后的,你看一下吧,呵呵,反正我改了之后,就可以了,或者你输满十四个字符,结果也是对的,你可以试一下。

5 楼


嗯,解释乱码是对的,可是你修改的程序运行出来并没有删掉k呀?!

6 楼

我有解释啊,你看这里
    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 楼

我写了一个。根据题目是要减去‘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 楼


scanf("%s",&str);这个语句是错的哦!!

str已经是地址了哦 

应该用scanf("%s",str);

我来回复

您尚未登录,请登录后再回复。点此登录或注册