C ++读取一行字符串作为整数?

时间:2016-01-07 14:23:02

标签: c++ vector char int line

我正在尝试用数字读取一行字符串字符(例如" 30 40 50 20")并将它们放入向量中。我还需要避免空格和换行符。但是当我阅读输入时,它没有看到字符串" 30"它会看到字符" 3"和" 4"。

void Input() {
        getline(cin,line, '\n');
        for (int i = 0; i < line.length(); i++) {
            if (! (isspace(line[i]))) {
                cout << line[i] << ", ";
                    scores.push_back(line[i]);//(atoi(input));
            }
        }
        cout << scores.size() << "! ";
    }

像&#34; 30 40 50&#34;不会给出矢量大小为3,它的大小为6。 解决这个问题的最佳方法是什么?

编辑:我应该在原始消息中澄清这是一个挑战,我无法在原始案例中包含字符串流库。

4 个答案:

答案 0 :(得分:2)

我认为你在解析前抓取整行是正确的做法,否则你会陷入困境。但你实际上必须做一些解析。现在你只是拔出个别角色。

以下内容并非最佳,但它会让您开始使用 - 继续使用格式化的流提取,但是从文件中隔离到此行。

所以:

void Input()
{
    getline(cin, line, '\n');
    istringstream ss(line);

    int val;
    while (ss >> val)
      scores.push_back(val);

    cout << scores.size() << "! ";
}

答案 1 :(得分:1)

读取该行并输入std::istringstream,然后读作&#34;通常&#34;使用字符串流中的>>运算符。

答案 2 :(得分:1)

将该行放入std::istringstream并从中提取数字是最好的方法。

以下是使用标准库的手动循环的替代方法:

std::istringstream numbers(line);
std::copy(std::istream_iterator<int>(numbers), 
          std::istream_iterator<int>(),
          std::back_inserter(scores));

答案 3 :(得分:0)

最好利用输入字符串组合,例如:http://www.cplusplus.com/reference/sstream/stringstream/stringstream/

提取运算符允许您将数据从流解析为数据类型T的某个变量。输入字符串流的另一个优点是能够查询传递是否成功,并且在您的情况下通过设置skipws格式标志来忽略空格字符

示例:

int main () {

  std::istringstream ss("30 40 50");
  float val = 0.0f;

  while( ss >> std::skipws >> val )
  {
      std::cout << val << "\n";
  }

  return 0;
}
  

出:30 40 50