まず、数値の加算と文字列の連結の違いを理解する必要があります。
はい、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;
}
(整数の)または['std :: stod'](http://en.cppreference.com/w/cpp/string/basic_string/stof)(浮動小数点値の場合)? –
あなたができることは、数字の意味を勉強することです。 23という数字が与えられたとき、「2」はどういう意味ですか?それは20を意味します。2 * 10。数字135では、1は何を意味しますか?それは100を意味します。もちろん、あなたのコードがやっているように、2と3を一緒に追加して23を得ることはできません。 135の近くに1、3、5の結果を追加することもありません。今、それについて考えてみましょう。答えは自明です。 –