C ++ Catch输出

时间:2013-06-21 13:05:48

标签: c++

我有一个关于“捕捉输出”的问题。 putchar (tolower (VAR));< - 这会以小写字母打印我刚刚通过std::getline (std::cin, VAR);输入的内容。我不想打印这个。如何“捕获”此输出,不在命令提示符下显示?

  

示例:输入“TeSTIngThis” - >输出:“testingthis”

for (unsigned i = 0; i < VAR.length (); i++)
{
    char TEMP = VAR[i];
    VAR[i] = putchar (tolower (TEMP));
}

2 个答案:

答案 0 :(得分:2)

目前尚不清楚你想要什么。你的循环很容易 重写:

std::transform(
    var.begin(), var.end(),
    var.begin(),
    []( char ch) { tolower( static_cast<unsigned char>( ch ) ); } )

如果像我们大多数人一样,你没有C ++ 11,那么你必须这样做 为tolower创建一个功能对象。但是,如果你 需要这一次,你可能会再次需要它,这是有道理的 将这样的功能对象放在工具箱中。 (这是真的 即使你有C ++ 11:

std::transform( var.begin(), var.end(), var.begin(), ToLower() );

比使用lambda的形式更清晰,更简单 表达。)

请注意,我已经消除了你未定义的行为 建议:你不能直接调用一个参数tolower 使用char而不会冒未定义的行为。

答案 1 :(得分:2)

听起来您需要做的是在Windows中使用getch()getche(),对于Linux,您可以使用this page中描述的方法。有了这个,您可以从stdin获取字符输入,有或没有回显到stdout。