如何读取忽略制表符空格的行

时间:2013-05-22 03:35:44

标签: c++ input

嗨我这里有一个读取输入行的代码。但是我需要帮助忽略行中的标签空间甚至是空格。

#include <iostream>
#include <sstream>


using namespace std;

int main()
{

string input;
string line;
 cout<< "Enter the input line" << endl;
 while (getline(cin, line))
   // while(cin >> line)
{

  stringstream in;
  in << line;
  //cout<<"What goen IN: " <<in<<endl;
  line = in.str();

  input = line ;
  cout<<"Input is:" << input <<endl;
 }

 cout<< "The input entered was: "<<endl;
 cout<< input<< endl;

}

示例输入:

Hello                 my name is brownie

应该阅读

hellomynameisbrownie

我无法找到方法..

4 个答案:

答案 0 :(得分:1)

您可以尝试从刚刚阅读的行中删除制表符和空格,如下所示:

 #include <algorithm>
 using namespace std;
 input.erase(remove(input.begin(), input.end(), '\t'), input.end());
 input.erase(remove(input.begin(), input.end(), ' '), input.end());

答案 1 :(得分:0)

有两种方式:

  • 逐个字符而不是一行读取,只在字符串中添加非空白字符。
  • 然后读入整个字符串并删除标签,空格等。

答案 2 :(得分:0)

您可能希望分两部分进行此操作。首先读取整行,然后将该行中的所有非空白字符复制到输出中。

std::string line;

while (std::getline(std::cin, line)) {
    std::istringstream buffer(line);
    std::copy(std::istream_iterator<char>(buffer),
              std::istream_iterator<char>(),
              std::ostream_iterator<char>(std::cout, ""));
    std::cout << "\n";
}

istream_iterator<char>部分使用标准>>流提取器一次读取一个字符,该提取器将跳过所有空格字符(空格,制表符等)

当然,您可以手动执行大致相同的操作:

while (std::getline(...)) {
    std::istringstream buffer(line);

    char ch;
    while (buffer >> ch)
        std::cout << ch;
}

首先想要读取一行的原因是因为operator>> char也将新行字符视为空格,因此如果您只是直接从输入文件复制到输出文件istream_iteratorostream_iterator它的工作效果会很好 - 除了要删除的空格外,它还会删除所有新行,这样你就会结束将整个文件连接成一条长行。

答案 3 :(得分:0)

每当在C / C ++中处理有关空格,制表符或其他空白字符的输入时,总是使用getchar()实现。

  • 编写代码非常简洁易懂的方法
  • 这是其他输入函数实现中使用的基本函数之一
  • 您不必记住至少接受输入的功能。

    int c;//Beware of taking it as a char
    while((c=getchar())!=EOF){
         //Do whatever you want here
         //in your case ignore tab and store other characters in the array
    }