整数ではなく、文字コードを保存しています。1
標準入力に入力して に保存char
すると、保存されるのは の ASCII コードで1
あり、整数値ではありません1
。
したがって、それを に割り当てるときは、次のようb[i]
にする必要があります。
b[i] = a[i] - '0'; // Of course, this will make sense only as long
// as you provide digits in input.
さらに、次のことを行います。
cout << b;
配列の内容ではなく、配列のアドレスを表示b
します。また、strlen()
配列a
がヌルで終了していないため、ここで使用することはお勧めできません。
これがどのようにタイプセーフでないかについての考慮事項はさておき、ここであなたが意図したことは次のとおりです。
#include <iostream>
#include <cstring>
using std::cout;
int main()
{
char a[3] = { 0, 0, 0 };
gets(a);
int b[3];
for(unsigned int i = 0; i < std::min(strlen(a), 3u); i++)
{
b[i] = a[i] - '0';
// ^^^^^
cout << b[i];
}
}
上記を C++11 で行う方法は次のとおりです。
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::string a;
getline(std::cin, a);
std::vector<int> b;
for (char c : a) { if (std::isdigit(c)) b.push_back(c - '0'); }
for (int x : b) { std::cout << x << " "; }
}
上記の関数を変更したものを次に示します。これは C++03 でも機能するはずです。
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::string a;
getline(std::cin, a);
std::vector<int> b;
for (std::string::iterator i = a.begin(); i != a.end(); i++)
{
if (std::isdigit(*i)) b.push_back(*i - '0');
}
for (std::vector<int>::iterator i = b.begin(); i != b.end(); i++)
{
std::cout << *i << " ";
}
}