选框字符串(向左滚动文字)

时间:2016-05-06 17:49:26

标签: c++ string c++11

我想要一个滚动文本的通用函数。 鉴于此,我已经做到了:

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

并重复序列......

1 个答案:

答案 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());
}