2

標準の C または C++ 関数を使用せずに数値を文字列に変換する方法を知りたいです。次に例を示します。

char str[20];
int num = 1234;
// How to convert that number to string (str)?

ありがとう。

4

5 に答える 5

2

最下位桁を取得するには、 を使用しますnum % 10。数字を文字に変換するには、 を追加し'0'ます。処理後に最下位の桁を削除するには、10 で割りますnum /= 10;。完了するまで繰り返します。

于 2013-11-08T17:55:41.467 に答える
2

C の使用 (C++ ではない)

str質問のようにバッファを事前に割り当てていると仮定します。

char *itostr(int num, char *str) {
    int len = 1;
    long tmp = num;
    int sign = num < 0;
    if (sign) {
        str[0] = '-';
        tmp = -tmp;
    }
    while (num/=10) ++len;
    str[len+sign] = 0;
    while (len--) {
        str[len+sign] = '0'+tmp%10;
        tmp /= 10;
    }
    return str;
}
于 2013-11-08T18:08:24.367 に答える
-1

これを行う簡単な方法は、多くの先行ゼロを残すことです。基本的なコードのみを使用し、動的なメモリ割り当てを必要としないため、気に入っています。その結果、非常に高速になるはずです。

char * convertToString(int num, str) {
    int val;

    val = num / 1000000000; str[0] = '0' + val; num -= val * 1000000000;
    val = num / 100000000;  str[1] = '0' + val; num -= val * 100000000;
    val = num / 10000000;   str[2] = '0' + val; num -= val * 10000000;
    val = num / 1000000;    str[3] = '0' + val; num -= val * 1000000;
    val = num / 100000;     str[4] = '0' + val; num -= val * 100000;
    val = num / 10000;      str[5] = '0' + val; num -= val * 10000;
    val = num / 1000;       str[6] = '0' + val; num -= val * 1000;
    val = num / 100;        str[7] = '0' + val; num -= val * 100;
    val = num / 10;         str[8] = '0' + val; num -= val * 10;
    val = num;              str[9] = '0' + val;
                            str[10] = '\0';

    return str;
}

もちろん、これに対して行うことができる微調整はたくさんあります。先頭の 0 を削除するように指示するブール値を追加するのと同様に、宛先配列の作成方法を変更することも可能です。そして、ループを使用してこれをより効率的にすることができます。改善された方法は次のとおりです。

void convertToStringFancier(int num, char * returnArrayAtLeast11Bytes, bool trimLeadingZeros) {
    int divisor = 1000000000;
    char str[11];
    int i;
    int val;

    for (i = 0; i < 10; ++i, divisor /= 10) {
        val = num / divisor;
        str[i] = '0' + val;
        num -= val * divisor;
    }
    str[i] = '\0';

    // Note that everything below here is just to get rid of the leading zeros and copy the array, which is longer than the actual number conversion.
    char * ptr = str;
    if (trimLeadingZeros) {
        while (*ptr == '0') { ++ptr; }
        if (*ptr == '\0') { // handle special case when the input was 0
            *(--ptr) = '0';
    }
    for (i = 0; i < 10 && *ptr != '\0'; ++i) {
    while (*ptr != '\0') {
        returnArrayAtLeast11Bytes[i] = *ptr;
    }
    returnArrayAtLeast11Bytes[i] = '\0';
}
于 2013-11-08T18:20:13.523 に答える