936241151 发表于 2020-12-16 20:18:14

pintia上的一道题,小白求助

程序输入一个字符串c和某个特定字符a,然后将字符串c中的数字字符替换为字符a,输出替换后的字符串c。
设计实现函数void f(int *c,char d),函数的功能为将字符串c中的数字字符替换为字符d。(要求不能使用字符串处理库函数直接替换)。
#include <stdio.h>
#define N 80

void f(int *c,char d){
    int i;
    for(i=0;i<80;i++){
      if(c>='0'&&c<='9'){*(c+i)=d;}
    }
}

int main(void){
    char c,a;
    gets(c);
    scanf("%c",&a);
    f(c,a);
    printf("%s",c);
    return 0;
}
它输出的总是和输入的一样

风过无痕1989 发表于 2020-12-16 21:39:16

#include <stdio.h>
#define N 80

void f(char *c, char d)    // 不能是 int 型,要用 char 型
{
        int i;
        for (i = 0;i<80;i++)
        {
                if (c >= '0'&&c <= '9') { *(c + i) = d; }
        }
}

int main(void)
{
        char c, a;
        gets_s(c);
        scanf("%c", &a);

        f(c, a);
        printf("%s", c);
        return 0;
}

风过无痕1989 发表于 2020-12-16 21:42:17

我仅仅只是改了第 4 行,下面那个 gets() 函数是因为我用 VS2015,它要求改为 gets_s(),这是因为微软认为 gets() 不安全

永恒的蓝色梦想 发表于 2020-12-16 21:59:57

风过无痕1989 发表于 2020-12-16 21:42
我仅仅只是改了第 4 行,下面那个 gets() 函数是因为我用 VS2015,它要求改为 gets_s(),这是因为微软认为...

但凡放到编译器里也不会出这种低级错误。你不能仔细点嘛?

风过无痕1989 发表于 2020-12-16 22:22:49

永恒的蓝色梦想 发表于 2020-12-16 21:59
但凡放到编译器里也不会出这种低级错误。你不能仔细点嘛?

我改成 char *c ,他的程序就运行正常了,只不过他的题目要求是用 int 型而已

永恒的蓝色梦想 发表于 2020-12-16 22:23:16

风过无痕1989 发表于 2020-12-16 22:22
我改成 char *c ,他的程序就运行正常了,只不过他的题目要求是用 int 型而已

难道 gets_s 只有一个参数?

风过无痕1989 发表于 2020-12-16 22:52:43

永恒的蓝色梦想 发表于 2020-12-16 22:23
难道 gets_s 只有一个参数?

gets_s 是不止一个参数,但已经不影响程序运行了,写不写也就没什么关系了。现在的问题是如何将 char* 转换为 int*,这个才是头痛的事

永恒的蓝色梦想 发表于 2020-12-16 22:54:28

风过无痕1989 发表于 2020-12-16 22:52
gets_s 是不止一个参数,但已经不影响程序运行了,写不写也就没什么关系了。现在的问题是如何将 char* 转 ...

编译都过不去

风过无痕1989 发表于 2020-12-16 23:20:13

永恒的蓝色梦想 发表于 2020-12-16 22:54
编译都过不去

程序编译、运行正常

永恒的蓝色梦想 发表于 2020-12-17 06:29:54

风过无痕1989 发表于 2020-12-16 23:20
程序编译、运行正常

你用的这个 gets_s,C语言不能用……

永恒的蓝色梦想 发表于 2020-12-17 06:35:58

风过无痕1989 发表于 2020-12-16 23:20
程序编译、运行正常

https://s3.ax1x.com/2020/12/17/r3euCR.png

风过无痕1989 发表于 2020-12-17 09:14:41

永恒的蓝色梦想 发表于 2020-12-17 06:35


这可能是设置的问题。我这里一开始,也是老老实实地写上后面的参数,后来发现,这个参数可以省略。所以,我在回答这类问题时,一般都会提醒是我的编译器要求要改的,这种函数包括有 scanf()、gets()、printf()。。。它们有时编译器要求要加,有时没有要求,只是一个警告

风过无痕1989 发表于 2020-12-17 09:23:22

永恒的蓝色梦想 发表于 2020-12-17 06:29
你用的这个 gets_s,C语言不能用……

我曾经回答问题时,没有经过编译器运行,被人说过,所以,现在我发出来的任何程序,都是经过我的编译器运行正常后才发出来的,不然我就坚决不发。你可以去查一查,有很多帖子,我都是比别人晚了几十秒到半个钟,就是我必须要运行正常而消耗的时间,也因此失去了很多的最佳答案。

好了,不说这个问题了,我继续考虑如何将 char 类型的数组地址转换为 int 类型的数组地址

永恒的蓝色梦想 发表于 2020-12-17 12:32:21

风过无痕1989 发表于 2020-12-17 09:14
这可能是设置的问题。我这里一开始,也是老老实实地写上后面的参数,后来发现,这个参数可以省略。所以, ...

gets_s 不加第二个参数顶多算个C++扩展,甚至还可能不是通用的(我不清楚),所以回答问题最好别用。
你把文件后缀改成 .c 就是按照 C 的标准了。

永恒的蓝色梦想 发表于 2020-12-17 12:37:59

风过无痕1989 发表于 2020-12-17 09:23
我曾经回答问题时,没有经过编译器运行,被人说过,所以,现在我发出来的任何程序,都是经过我的编译器运 ...

将 char 类型的数组地址转换为 int 类型的数组地址int* p = NULL;
char* str = (char*)p;这不就行了?

风过无痕1989 发表于 2020-12-17 13:20:17

永恒的蓝色梦想 发表于 2020-12-17 12:32
gets_s 不加第二个参数顶多算个C++扩展,甚至还可能不是通用的(我不清楚),所以回答问题最好别用。
你 ...

我还没学C++,所以,我编译程序时,都是加上 .c 的

永恒的蓝色梦想 发表于 2020-12-18 06:20:02

风过无痕1989 发表于 2020-12-17 13:20
我还没学C++,所以,我编译程序时,都是加上 .c 的

你加上.c是怎么加的……你的源文件扩展名是 .cpp

风过无痕1989 发表于 2020-12-18 10:20:59

永恒的蓝色梦想 发表于 2020-12-18 06:20
你加上.c是怎么加的……你的源文件扩展名是 .cpp

软件启用的后面就是 .cpp 呀

永恒的蓝色梦想 发表于 2020-12-18 18:43:01

风过无痕1989 发表于 2020-12-18 10:20
软件启用的后面就是 .cpp 呀

……所以说这个代码用C标准编译不能通过

风过无痕1989 发表于 2020-12-18 19:51:11

永恒的蓝色梦想 发表于 2020-12-18 18:43
……所以说这个代码用C标准编译不能通过

谢谢,我好像知道怎么使用C程序了
页: [1]
查看完整版本: pintia上的一道题,小白求助