3

我有一个关于“捕捉输出”的问题。<- 这会以小写字母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));
}
4

2 回答 2

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 使用 a调用一个参数char而不冒未定义行为的风险。

于 2013-06-21T13:42:23.440 回答
2

听起来您需要做的是使用getch()getche()在 Windows 和 Linux 中,您可以使用此页面中描述的方法。有了这个,您可以从标准输入获取字符输入,无论是否回显到标准输出。

于 2013-06-21T13:51:22.143 回答