【问题标题】:Parse a string to int将字符串解析为 int
【发布时间】:2013-05-05 04:14:25
【问题描述】:

我对编码很陌生,我希望有人能帮助我吗?我正在尝试读取一行以空格分隔的整数并将它们解析为(最终成为链表)一个向量。

所以一旦我有了一个整数向量,就有了 STL 向量的迭代器,但是我如何遍历不在 STL 中的链接列表中的节点?

#include <cstdlib>
#include <iostream>
#include <string>
#include <sstream>
#include <vector>

using namespace std;

int main(int argc, char** argv) {    
    cout << "Enter some integers, space delimited:\n";
    string someString;
    getline(cin, someString);

    istringstream stringStream( someString );
    vector<string> parsedString;
    char splitToken = ' ';

    //read throguh the stream
    while(!stringstream.eof()){
        string subString;
        getline( stringStream, subString, splitToken);
        if(subString != ""){
        parsedString.push_back(subString);
        }
   }

    return EXIT_SUCCESS;
}

【问题讨论】:

  • 稍后提醒自己:std::istream_iterator&lt;std::string&gt; first(stringStream), last; std::vector&lt;std::string&gt; parsedString(first, last); 用于将字符串拆分到容器中(尽管我认为这不是您真正想要做的)。这个网站上的一个热门问题还有其他方法。
  • 为什么不只是int a; while (cin &gt;&gt; a) { // do something }
  • 你想自己实现链表吗?
  • “想要”这个词不完全是……但是,我是一名学生,我的教授坚持以最艰难的方式做所有事情……

标签: c++ linked-list tokenize istringstream


【解决方案1】:

stringstream 可以像这样自动处理分隔符:

cout << "Enter some integers, space delimited:\n";
string someString;
getline(cin, someString);

istringstream stringStream( someString );
vector<int> integers;
int n;
while (stringStream >> n)
    integers.push_back(n);

【讨论】:

  • 难道我还不需要使用 getline 将键盘输入捕获到 someString 中吗?
  • 好的,所以现在我有了向量,我知道如何为 STL 向量创建一个迭代器,但是如果我编写一个链表类,那么就没有一个 STL 迭代器(而且我不能写一个正确的?)。你会建议我如何遍历链表?我为 head 和 current 定义了一个指针。
  • @StillLearningToCode 您应该将其作为一个不同的问题发布,并查看std::list
  • @nullptr 你能准确地说出什么包含 (stringStream >> n) 吗?我的意思是为什么它在行尾被检测为假?
【解决方案2】:

既然是空格分隔符,何乐而不为:

#include <iostream>
using namespace std;

int main() {
    int a;
    vector<int> v;
    while (cin >> a) {
        v.push_back(a);
    }

    for (int i = 0; i < v.size(); ++i) {
        int b = v[i];
    }

    return 0;
}

顺便说一句,ctrl-D 或非整数输入,如 char,将终止此 while

【讨论】:

  • 虽然这个例子有效,但他的原始代码接受了一行整数,然后对其进行处理。这将一直持续到cin 停止提供整数
  • 大声笑,你们让它看起来很容易。我一直试图让一个简单的 cin 工作......
  • @MichaelMenard 查看更新。大多数时候,您可以将其视为一个数组。当然,你可以使用iterator
  • @gongzhitaao,如果我使用数组,那么用户可以输入的整数数量是有上限的。
猜你喜欢
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 2011-06-25
相关资源
最近更新 更多