c++ - 字幕字符串(向左滚动文本)

标签 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

等等...给定“正在播放 - ”和 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/

相关文章:

c++ - 如何使用预处理器制作跨平台库?

c++ - 打印数组将 48 添加到预期值

c++ - 将 Matlab 数组移植到 C/C++

c++ - 将 make_shared 与构造函数一起使用时,gcc 4.7.3 内部编译器错误

c++ - 替换字符串中的单词而不跳过空格

java - 用不同的字符替换字符串中的所有字符

c++ - 输入迭代器可以重复读取而输出迭代器只能写入一次?

c++ - 提取类的模板参数并迭代它们的最紧凑的方法是什么?

c++ - 为什么我可以在不包含 STL 的情况下使用 nullptr?

java - 将字符串转换为十六进制的字符集是什么?