2017-06-24 6 views
-1

文字の配列を持っていて、その文字を数字にしたいと思います。文字ではなく整数です。例えばC++ - charを使って作業し、整数に変換する方法(ポイント付きの極端なケース番号)

:私はそれらすべてを接続するので、私は何を得る

'1','2','3','5'; 

while(...){ 
num+= check - '0'; 
... 
} 

しかし、最終的には、11です。 どうすれば入手できますかint number = 1235;

と数字がある場合は12.123私は何ができますか?

ありがとうございました!

+0

(整数の)または['std :: stod'](http://en.cppreference.com/w/cpp/string/basic_string/stof)(浮動小数点値の場合)? –

+0

あなたができることは、数字の意味を勉強することです。 23という数字が与えられたとき、「2」はどういう意味ですか?それは20を意味します。2 * 10。数字135では、1は何を意味しますか?それは100を意味します。もちろん、あなたのコードがやっているように、2と3を一緒に追加して23を得ることはできません。 135の近くに1、3、5の結果を追加することもありません。今、それについて考えてみましょう。答えは自明です。 –

答えて

1

まず、数値の加算と文字列の連結の違いを理解する必要があります。

はい、C++では、両方とも+演算子が使用されています(演算子のオーバーロードと呼びます)。しかし、それは同じことを意味しません。 あなたの例では、数字の序数をchar桁から差し引いています。実際には、数字が表す数値が与えられます。これらを追加して、11で終わります。

数字を文字列に連結する場合は、文字列を作成し、2 /連結する必要があります。文字列の+演算子を使用するので、コンパイラは数値加算の代わりに連結を行います。

したがって、このような何か:[ `のstd :: stoi`](http://en.cppreference.com/w/cpp/string/basic_string/stol)を使用することにより

#include <iostream> 
#include <string> 

int main(int argc, char * const argv[]) { 
    char a[] = {'1', '2', '3', '5'}; 

    int num = 0; 
    std::string str; 

    for (char c : a) { 
     num += c - '0'; 
     str += c; 
    } 

    std::cout << "num == " << num << std::endl; 
    std::cout << "str == " << str << std::endl; 

    return 0; 
} 
+0

ああ、私は忘れてしまった。 'num = 10 * num +(c - '0')'のように、文字列の代わりに1235の整数を取得したい場合は、各追加の前に現在のnum値に10を掛けるだけです。 – vencik

関連する問題