S飞速黑鱼崽B @ 2021-08-05 15:24:52
为啥输出的数字前面会有一堆空格,长度跟我开的数组一样,如果负数的话是“-(空格,空格,空格……)数字”这样的。下面是代码
#include<bits/stdc++.h>
using namespace std;
#define MAXN 15
int main() {
char c[MAXN] = {0};
cin >> c;
bool p = 1;
if (c[0] == '-') {
cout << "-";
for (int i = MAXN - 1;i > 0;i--) {
if (c[i] == '0' && p) {
continue;
} else {
cout << c[i];
p = 0;
}
}
} else {
for (int i = MAXN - 1;i >= 0;i--) {
if (c[i] == '0' && p) {
continue;
} else {
cout << c[i];
p = 0;
}
}
}
return 0;
}
by Icedpiggy @ 2021-08-05 20:50:55
@S飞速黑鱼崽B
我懂你的意思了,你说的"输入到char里面0会变成'0'
"是对的。
但是我的意思是:你是从MAXN-1
开始枚举,你实际上输入的字符串长度可能小于MAXN-1
,这会导致你的字符串数组中,可能会有一段是'\0'
,因为'\0' == 0
,所以'\0' != '0'
。
在你的程序中,如果发现c[i] != '0'
,那么c[0]~c[i]
(正)或c[1]~c[i]
(负)的字符会全部被逆序输出,包括'\0'
与'0'
。
另外,你说的所谓“空格”,是'\0'
,不管是在“小黑窗”(控制台)或是记事本中,它都长得像空格一样。
你可以用printf("%d",c[i]);
检验我说的真伪。
我的改法呢,不难理解,可以过滤'0'
与'\0'
两种字符。
当然comcopy这位的说法也完全正确。
希望这条回复可以帮到你。