1

好的,所以我正在尝试制作一个字符串,以便更新字符串。有点像你有一个字符串“hello”,我希望它更新自己有点像“h”“he”“hel”“hell”“hello”

所以我有:

#include <iostream>
#include <string>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

using namespace std;

int main()
{
    system("title game");
    system("color 0a");
    string sentence = "super string ";

    for(int i=1; i<sentence.size(); i++){
        cout << sentence.substr(0, i) <<endl;
    }
    return 0;
}

代码返回如下:

"s "su" "sup" "supe" "超级"

显然在不同的行上,但是当我删除结尾行时,句子生成器就会发疯。它显示类似“spupsppuepr sttrrrtrsubstringsubstring”的内容

无论如何我可以更新同一行上的字符串吗?(并没有完全摧毁它)

4

3 回答 3

3

您可以在每次迭代时打印一个回车符'\r',将光标返回到行首:

for(int i=1; i<sentence.size(); i++){
    cout << '\r' << sentence.substr(0, i);
}

或者只是按顺序输出每个字符:

for(int i=0; i<sentence.size(); i++){
    cout << sentence[i];
}

您可能还想为每个循环迭代插入一个短暂的延迟以实现打字机效果。

于 2012-05-25T01:13:19.257 回答
0

运行您的代码会产生以下结果:

./a.out
ssusupsupesupersuper super ssuper stsuper strsuper strisuper strinsuper string

这正是你告诉它要做的事情。它与 endl 相同,但没有换行符。如果您不希望它重复所有字母,则需要遍历字符串本身,而不是遍历子字符串。

using namespace std;

int main()
{
    system("title game");
    system("color 0a");
    string sentence = "super string ";

    for(int i=0; i<sentence.size(); i++){
        cout << sentence[i];
    }
    return 0;
}
于 2012-05-25T01:13:19.500 回答
0

我的建议:使用While loop.

#include <stdio.h>
#include <iostream>

int main() {
    system("title game");
    system("color 0a");
    char* sentence = "super string";

    while( *sentence ) std::cout <<  *sentence++;
    return 0;
}
于 2012-05-25T02:30:29.017 回答