首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >读取由空格或换行符分隔的输入...?

读取由空格或换行符分隔的输入...?
EN

Stack Overflow用户
提问于 2011-04-21 10:34:24
回答 6查看 128.4K关注 0票数 22

我从一个标准输入流中抓取输入。比如,

代码语言:javascript
复制
1 2 3 4 5

代码语言:javascript
复制
1
2
3
4
5

我使用的是:

代码语言:javascript
复制
std::string in;
std::getline(std::cin, in);

但这只是抓住了换行符,对吗?我如何只使用iosteam、string和cstdlib来输入它们是用换行符还是空格分隔的?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-04-21 10:43:10

只需使用:

代码语言:javascript
复制
your_type x;
while (std::cin >> x)
{
    // use x
}

默认情况下,operator>>将跳过空白。您可以通过链接来一次读取多个变量:

代码语言:javascript
复制
if (std::cin >> my_string >> my_number)
    // use them both

getline()在一行中读取所有内容,无论它是空的还是包含几十个空格分隔的元素,都会返回。即使你提供了可选的替代分隔符ala getline(std::cin, my_string, ' '),它仍然不会做你想要的事情,例如制表符将被读入my_string

这可能不需要,但您可能很快会感兴趣的一个相当常见的要求是读取单个以换行符分隔的行,然后将其拆分成多个组件……

代码语言:javascript
复制
std::string line;
while (std::getline(std::cin, line))
{
    std::istringstream iss(line);
    first_type first_on_line;
    second_type second_on_line;
    third_type third_on_line;
    if (iss >> first_on_line >> second_on_line >> third_on_line)
        ...
}
票数 34
EN

Stack Overflow用户

发布于 2011-04-21 10:57:41

使用'q'作为getline的可选参数。

代码语言:javascript
复制
#include <iostream>
#include <sstream>

int main() {
    std::string numbers_str;
    getline( std::cin, numbers_str, 'q' );

    int number;
    for ( std::istringstream numbers_iss( numbers_str );
          numbers_iss >> number; ) {
        std::cout << number << ' ';
    }
}

http://ideone.com/I2vWl

票数 5
EN

Stack Overflow用户

发布于 2011-04-21 10:45:37

std::getline( stream,到哪里?,定界符ie

代码语言:javascript
复制
std::string in;
std::getline(std::cin, in, ' '); //will split on space

或者,您可以读入一行,然后根据您希望的分隔符对其进行标记。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5738882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档