我想像这个例子一样逐个字母慢慢地打印文本
//example
int main()
{
string message = "Lorem ipsum dolor sit amet, nconsectetur adipisicing elit. Voluptatum, porro nnesciunt laboriosam adipisci provident eum?n";
slow_print(message, 30);
return 0;
}
但是我想让这个效果与 cout 命令一起使用,但我找不到任何解决方案。如果有人知道如何解决这个问题,请帮助我
好的,让我们使用cout
来做到这一点。cout
单独做不到,你需要一些io操纵器或类似的。我将使用一个类型来指示字符串应该慢慢打印:
struct slowly_printing_string {
std::string data;
long int delay;
};
接下来,我们为此类型提供一个输出运算符:
std::ostream& operator<<(std::ostream& out, const slowly_printing_string& s) {
for (const auto& c : s.data) {
out << c << std::flush;
std::this_thread::sleep_for(std::chrono::milliseconds(s.delay));
}
return out;
}
它打印单个字符,刷新流(否则可能会在以后的某个时间点看到完整的字符串(,并等待指定的时间。
你可以这样称呼它:
std::cout << slowly_printing_string{"hello world",1000};
完整示例
我可以通过这段代码来做到这一点,但如果你正在向企业发展,我不推荐这段代码:
#include <iostream>
#define LENGTH(x) (sizeof(x) / sizeof(x[0]))
using namespace std;
void printSlowCharacters(char * strToPrint) {
while(*strToPrint) {
cout << *strToPrint++ << endl;
system("sleep 5");
}
}
int main() {
char * nome = "Davi";
printSlowCharacters(nome);
return 0;
}
您可以使用#include <windows.h>
,然后在循环中单独打印每个字符并将其与Sleep(time_in_ms)
交织在一起。
怎么可能?每个std::string
都是一个字符数组,类似于char*
,这样您就可以通过索引访问每个字符。