在C ++中通过迭代更新字符串

时间:2012-05-25 01:06:55

标签: c++ windows

好的,所以我正在尝试创建一个字符串,以便更新字符串。有点像你有一个字符串“你好”,我希望它更新自己有点像“h”“他”“hel”“地狱”“你好”

所以,我有:

#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 “苏” “SUP” “苏佩” “超级”

显然在不同的行上,但是当我删除结束行时,句子构建器就变得狂暴了。它显示类似“spupsppuepr sttrrtrsubstringsubstring”

的内容

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

3 个答案:

答案 0 :(得分: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];
}

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

答案 1 :(得分: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;
}

答案 2 :(得分: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;
}