繁体   English   中英

使用 (cin.get(c)) 时如何忽略最终的换行符

[英]How can I ignore final newline char when using (cin.get(c))

我有一个简短的程序,它接受文本输入并输出每个字符,包括完整的转义序列。

“Stack Overflow 2020”变成 -> “Stack\\sOverFlow\\s\\2\\0\\2\\0”

但是,当我运行我的程序时,我必须在终端中使用 -n 标志,它包含一个额外的换行符。 我可以阻止我的程序在输出结束时输出这个额外的 /n(换行符)字符吗?

带旗

echo -n "Stack OverFlow 2020" | ./escapec -> Stack\\sOverFlow\\s\\2\\0\\2\\0

没有 - 在输出末尾查看额外的换行符

echo "Stack OverFlow 2020" | ./escapec -> Stack\\sOverFlow\\s\\2\\0\\2\\0\\n


#include <string>
#include <map>
#include <iostream>

using namespace std;

string escapeChar(char c);

// EscapeMap is used by escapeChar to obtain the un-escaped string of ascii encodings. space,  tab, carriage return and  newline.

map<int, string> escapeMap = {  {32, "\\s"}, {9, "\\t"}, {13, "\\r"}, {92, "\\"},{10,"\\n"} };


string escapeChar(char c) {

        if (isdigit(c)) {
                return "\\" + to_string(int(c) - 48);
        }
        else {
                if (escapeMap.count(int(c))) {
                        return escapeMap.at(int(c));
                }
        }

        return string(1, c);

}

int main() {

        char c;

        while (cin.get(c))
        {
                cout << escapeChar(c);
        }

}



您可以使用peek读取下一个字符而不将其从流中删除,然后如果它是EOF并且当前字符是换行符,那么只需做一个解决方法:不要打印它:

while (cin.get(c)) {
    if (c == '\n' && cin.peek() == EOF) break;
    cout << escapeChar(c);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM