我在一个字符数组下存储一个值,比如6。 我想将相同的值6传递给一个integet数组,但只是这个代码有效:
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。 我想存储相同的no 6而不是整数值(即54)。 任何想法?
提前致谢
答案 0 :(得分:2)
您正在存储字符代码,而不是整数。如果您在标准输入上键入1
并将其存储在char
中,那么将存储的是1
的ASCII代码,而不是整数值1
。< / p>
因此,当您将其分配给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 << " ";
}
}