鱼C论坛

 找回密码
 立即注册
查看: 2693|回复: 2

求助大佬们,为什么输入q w e r 输出结果为q,代码附上

[复制链接]
发表于 2019-9-29 09:41:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
file1.c
#include<stdio.h>

int main()
{
        extern void delete_string(char str[], char ch);
        extern void enter_string(char str[80]);
        extern void print_string(char str[]);
       
        char c, str[80];
        enter_string(str);
        scanf_s("%c", &c,2);
        delete_string(str,c);
        print_string(str);
        return 0;

file2.c
void enter_string(char str[80])
{
        gets(str);

}


file3.c
void delete_string(char str[], char ch)
{
        int i, j;
        for (i = j = 0; str[i] != '\0'; i++)
        {
                if (str[i] != ch)
                {
                        str[j++] = str[i];
                }
                str[j] = '\0';
        }


}


file4.c
#include<stdio.h>

void print_string(char str[])
{
        printf("%s\n", str);


}



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-29 10:37:34 | 显示全部楼层
本帖最后由 jackz007 于 2019-9-29 10:57 编辑

void delete_string(char str[], char ch)
{
        int i, j;
        for (i = j = 0; str[ i ] != '\0'; i++)
        {
                if (str[ i ] != ch)
                {
                        str[j++] = str[ i ];
                }
                str[j] = '\0';
        }
}

      问题出在标红的那两句,经过这个函数处理过后,如果字符串首字符是需要删除的目标字符,就输出空串,否则,就会输出由这个字符构成的单个字符字符串;

      其实,只需要修改一句就好:

void delete_string(char str[], char ch)
{
        int i, j;
        for (i = j = 0; str[ i ] != '\0'; i++)
        {
                if (str[ i ] != ch)
                {
                        str[j++] = str[ i ];
                }
        }
       str[j] = '\0';
}

        很简单的一个程序,干嘛要分那么多代码文件,我整体修改了一下,谨供楼主参考
#include <stdio.h>
#include <string.h>

int main(void)
{
        char c , str[80]                      ;
        int b , k                             ;
        fflush(stdin)                         ;
        fgets(str , 80 , stdin)               ;
        str[strlen(str) - 1] = '\0'           ;
        fflush(stdin)                         ;
        c = getchar()                         ;
        for(b = k = 0 ; k < strlen(str) ; k ++) {
                if(str[k] != c) {
                    if(b < k) str[b] = str[k] ;
                    b ++                      ;
                }
        }        
        if(b < k) str[b] = '\0'               ;
        printf("%s\n" , str)                  ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-10-6 11:29:06 | 显示全部楼层
谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-4 13:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表