嗨我这里有一个读取输入行的代码。但是我需要帮助忽略行中的标签空间甚至是空格。
#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
我无法找到方法..
答案 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_iterator
和ostream_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
}