输出格式有一点问题

P1307 [NOIP2011 普及组] 数字反转

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这位的说法也完全正确。

希望这条回复可以帮到你。


上一页 |