-2

我在字符数组下存储一个值,比如 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)

上面的代码在其中存储了 6 的 INTEGER VALUE。它不直接存储 6。我想存储相同的 6 号而不是整数值(即 54)。有任何想法吗?

提前致谢

4

1 回答 1

2

您正在存储字符代码,而不是整数。如果您1在标准输入中键入并将其存储在 achar中,则将存储的是 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 << " ";
    }
}
于 2013-03-31T12:29:46.300 回答