gpt4 book ai didi

C++ : Fastest way to read string from stdin

转载 作者:行者123 更新时间:2023-11-30 01:18:53 24 4
gpt4 key购买 nike

我们可以使用 getchar_unlocked 通过操作字符来快速读取标准输入中的整数:

int scan_d()
{
int ip = getchar_unlocked(), ret = 0, flag = 1;

for(; ip < '0' || ip > '9'; ip = getchar_unlocked())
{
if(ip == '-')
{
flag = -1;
ip = getchar_unlocked();
break;
}
}

for(; ip >= '0'&& ip <= '9'; ip = getchar_unlocked())
ret = ret * 10 + ip - '0';
return flag * ret;
}

有没有办法使用类似上面的方法快速从标准输入读取字符串? gets 比 cin/scanf 更快,但同时拥有对空白的严格处理。我想修改上面的字符串代码,但遇到了空格问题。此外,一个一个地读取字符串的每个字符似乎会更慢。

stdin 我的意思是字符串是由用户输入的(没有文件处理)

最佳答案

Is there a way to read strings from stdin in a fast manner using something like above?

当然。如果您更清楚您希望它如何运作,我们甚至可以提供代码。

gets is faster than cin/scanf but at the same time possess critical handling of whitespaces.

cinscanf 也可以做到这一点:How to cin Space in c++?How do you allow spaces to be entered using scanf?

I thought of modifying the above code for strings but faced problems with whitespaces.

什么问题? https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem

Further, it seems reading every character of a string one by one will be slower.

比 block 读取慢?当然。但是,一次读取一个字符确实是判断字符串结尾位置的唯一方法。您可以阻止读入缓冲区并旋转它以找到字符串的末尾,这称为缓冲。但是 stdin 已经被缓冲,所以再次缓冲它会使它更慢而不是更快。没有比一次使用 getchar_unlocked 读取一个字符更快的读取空格分隔字符串的方法了。

关于C++ : Fastest way to read string from stdin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21890170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com