我想要一个向左滚动文本的通用函数。 鉴于此,我做了这个:
void marquee2(std::string& text) {
std::string temp = text;
text.erase(0, 1);
text += temp[0];
}
它就像一个魅力。
如果你这样调用它:
int main()
{
std::string test = "Now playing - TEST.MP3 - ";
while (true)
{
marquee2(test);
SetConsoleTitleA(test.c_str());
}
return 0;
}
它给了我想要的结果:
Now playing - TEST.MP3 -
ow playing - TEST.MP3 - N
w playing - TEST.MP3 - No
playing - TEST.MP3 - Now
playing - TEST.MP3 - Now
laying - TEST.MP3 - Now p
aying - TEST.MP3 - Now pl
ying - TEST.MP3 - Now pla
ing - TEST.MP3 - Now play
ng - TEST.MP3 - Now playi
g - TEST.MP3 - Now playin
- TEST.MP3 - Now playing
- TEST.MP3 - Now playing
TEST.MP3 - Now playing -
TEST.MP3 - Now playing -
等等……
但主要问题是,当我想限制字符串时。 因此,我希望以某种方式更改我的函数,以便它应该限制结果字符串。
void marquee_limit(std::string& msg, size_t limit)
给定“TEST”和 2,期望的结果:
TE
ES
ST
TT
TE
ES
ST
TT
等等...给定 TEST 和 3:
TES
EST
STT
TTE
TES
EST
STT
TTE
等等...给定“正在播放 - ”和 3:
NOW
OW
W P
PL
PLA
LAY
AYI
YIN
ING
NG
G -
-
- N
NO
NOW
然后重复序列...
最佳答案
一种方法是像这样修改现有函数:
std::string marquee_limit(std::string& text, size_t limit) {
std::string temp = text;
text.erase(0, 1);
text += temp[0];
return text.substr(0,limit);
}
然后在你的 while 循环中这样调用它:
while (true)
{
SetConsoleTitleA(marquee_limit(test,2).c_str());
}
关于c++ - 字幕字符串(向左滚动文本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37078561/