0

嗨,我这里有一个读取输入行的代码。但是我需要帮助来忽略行中的制表符空格甚至空格。

#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

4 回答 4

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());
于 2013-05-22T03:41:45.967 回答
0

几种方法:

  • 逐个字符读取而不是一次读取整行,并且只将非空白字符添加到您的字符串中。
  • 读入整个字符串,然后删除制表符、空格等。
于 2013-05-22T03:39:46.333 回答
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>>forchar也会把换行符当作空格,所以如果你直接从输入文件复制到输出文件,istream_iteratorostream_iterator会工作得有点太好了-- 除了要删除的空格外,它还会删除所有换行符,因此您最终会将整个文件连接在一起形成一条长线。

于 2013-05-22T03:41:37.153 回答
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
    }
    
于 2013-05-22T03:45:43.107 回答