я сохраняю значение, скажем, 6 под массивом символов.
я хочу передать то же значение 6 в массив целых, но просто этот код не работает:
char a[3];
gets(a); (for ex: value of a i.e a[0] is 6)
int b[3];
for(int i=0;i<strlen(a);i++)
b[i]=a[i];
cout<<b; (it returns 54 nd not 6)
Приведенный выше код хранит INTEGER VALUE 6 в нем. он не хранит 6 напрямую.
я хочу сохранить то же самое нет 6, а не целое значение (т. е. 54).
есть идеи?
заранее спасибо
Вы храните коды символов, а не целые числа. Если вы печатаете 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 << " ";
}
}
Других решений пока нет …