Turbo C ++ массив символов в массив int

я сохраняю значение, скажем, 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).
есть идеи?

заранее спасибо

-2

Решение

Вы храните коды символов, а не целые числа. Если вы печатаете 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 << " ";
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]