C ++打印从字符串转换的向量的内容

时间:2016-12-21 07:12:38

标签: c++ vector

我遇到一些问题,弄清楚为什么这不会打印我的矢量元素(我通过转换输入字符串中的内容来创建)

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <cctype>
#include <complex>

using namespace std;

int main() {

    //produce inputline string
    string inputline;
    cout << "Enter Input line" << endl;
    getline(cin, inputline);

    //strip inputline of whitespace
    inputline.erase(
        remove(inputline.begin(), inputline.end(), ' '), 
        inputline.end());

    cout << inputline << endl;

    vector<int> intvect(inputline.begin(), inputline.end());

    for (vector<int>::const_iterator iter= intvect.begin(); iter!= intvect.end(); ++iter)
        cout << *iter << endl;
}

如果我输入“1 2 3”,第17行正确地将“123”打印到控制台。

然而,对于相同的代码行19和20打印: “ 49 50 51 “

我可能做错了什么?

我真的很感激这方面的帮助。

2 个答案:

答案 0 :(得分:2)

执行此操作时:

vector<int> intvect(inputline.begin(), inputline.end());

逐个读取字符,其ASCII值存储在intvect中。 ASCII值1为49,2为50,依此类推。这就是你所看到的输出。

如果您将vector<int>转换为vector<char>,您将能够成功读取单个数字,但不能读取多位数字。例如。如果您输入11 12 13,它会将其视为1 1 1 2 1 3.

您必须使用空格作为分隔符来分隔数字,然后将它们转换为整数并将它们提供给int向量。

答案 1 :(得分:0)

看起来你正在从一个字符串构造一个INT向量。 Vector在输入行中存储ASCII等效字符。 &#34; 49 50 51&#34;是输入的ASCII值&#34; 1 2 3&#34;

下面的代码应该可以使用,其中使用了Vector of Char而不是INT。

vector<char> intvect(inputline.begin(), inputline.end());

for (vector<char>::const_iterator iter= intvect.begin(); iter!= intvect.end(); ++iter)
cout << *iter << endl;
}