C语言编译失败 关于字符串求助

P4414 [COCI2006-2007#2] ABC

关键点是这道题和字符串没关系啊
by zhengshuyue @ 2023-09-24 15:03:44


自己实现 `max`、`min` 函数。
by hang2023 @ 2023-09-24 15:06:02


以下是 max/min 函数的定义: ```cpp template<typename T> T max(T a,T b) {return (a>b?a:b);} template<typename T> T min(T a,T b) {return (a>b?a:b);} ``` ---------- 禁止引战
by hang2023 @ 2023-09-24 15:07:47


@[shadow1syx](/user/1053560) 用 strcmp 或者 std::string
by Argvchs @ 2023-09-24 15:10:29


@[shadow1syx](/user/1053560) 你对两个 char* 比较,实际上比较的是他们的地址 第一个输出 yes 是因为编译器有优化,所有相同的 string literal(编译时可知的字符串,例如不能是输入的)都存储在同一地址 但是第二个输出 No 是因为你自己开了一个数组就存储在另外一个地址了 `strcmp(a, b)` 可以实现两个 `char*` 的字典序比较,$a > b$ 返回正,$a < b$ 返回负,$a = b$ 返回 $0$ 或者你直接将类型改为 `std::string`(不需要指定长度),这样就可以直接 `a == b` 比较了
by Argvchs @ 2023-09-24 15:22:29


@[Argvchs](/user/533270) 谢谢大佬 @[hang2023](/user/989398) 我调用了math头文件 max和min没有受到影响 应该可以直接用的(就是懒得自己写函数了qwq)
by Kotori_Kawaii @ 2023-09-24 15:52:36


``` #include<stdio.h> #include<math.h> #include<string.h> int max(int a,int b) { int max1; if(a>b){ max1=a; }else{ max1=b; } return max1; } int min(int a,int b) { int min1; if(a>b){ min1=b; }else{ min1=a; } return min1; } int main() { int a, b, c,least,mid,most; scanf("%d %d %d", &a, &b, &c); char input1[4] = ""; scanf("%s", input1); most = max(max(a, b), c); least = min(min(a, b), c); mid = a + b + c - most - least; a = least; b = mid; c = most; if (strcmp(input1,"ABC") == 0) { printf("%d %d %d", a, b, c); } else if(strcmp(input1,"ACB") == 0){ printf("%d %d %d", a, c, b); } else if (strcmp(input1, "BAC") == 0) { printf("%d %d %d", b, a, c); } else if (strcmp(input1, "BCA") == 0) { printf("%d %d %d", b, c, a); } else if (strcmp(input1, "CAB") == 0) { printf("%d %d %d", c, a, b); } else if (strcmp(input1, "CBA") == 0) { printf("%d %d %d", c, b, a); } return 0; } ``` 已AC 然后 @[hang2023](/user/989398) 对不起老哥我错了QAQ我不该懒的 同时谢谢 @[Argvchs](/user/533270) 大佬 非常感谢
by Kotori_Kawaii @ 2023-09-24 16:19:22


@[shadow1syx](/user/1053560) 大佬,就是问一下这里面input1[4] = "";为什么要用4阿,还有就是后面的= ""有什么用呢?
by zhuiming2323 @ 2023-09-25 22:54:13


@[zhuiming2323](/user/1055820) 因为字符串长度为3,多开一位防止溢出,这是习惯了(也有可能存储"\0",这个你搜一下比较好) ""表示字符串里面为空
by Kotori_Kawaii @ 2023-09-26 08:23:34


|