我想要一个滚动文本的通用函数。 鉴于此,我已经做到了:
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
等等......鉴于“NOW PLAYING - ”和3:
NOW
OW
W P
PL
PLA
LAY
AYI
YIN
ING
NG
G -
-
- N
NO
NOW
并重复序列......
答案 0 :(得分:1)
一种方法是修改你现有的功能:
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());
}