2016-05-09 112 views
-2

所以我試圖在屏幕上使文本滾動,例如;^h - 他 - HEL - 地獄 - 你好我的substr()不能按預期工作

#include <iostream> 
#include <stdlib.h> 


using namespace std; 

int main() 
{ 
    string text = "Welcome to the Password Vault!"; 
    int x; 
    for (x = 0; x < text.length(); x++) { 
     cout << text.substr(x,x); 
     _sleep(0100); 
    } 
    return 0; 
} 

它輸出:

 
elccomome me toe to t to theto the Po the Pas the Passwthe Passworhe Password e Password Va Password VaulPassword Vault!assword Vault!ssword Vault!sword Vault!word Vault!ord Vault!rd Vault!d Vault! Vault!Vault!ault!ult!lt!t!! 
Process returned 0 (0x0) execution time : 1.961 s 
Press any key to continue. 

我想輸出:

 
Welcome to the password vault! 

請幫幫我!

+0

通常你需要發送一個字符來移動光標回到行的開頭,例如:'\ r'。 – tadman

+1

大家知道,C++ 11有一個標準的'std :: this_thread :: sleep_for'函數。並且0100是4的八進制文字,而不是100的值。 – chris

+0

否#include '? – CinCout

回答

4

您不僅要更改起始位置,還要更改要獲取的子字符串的長度,這是第二個參數。如果您只想一次獲取一個字符,則第二個參數應該是1

參見例如this substr reference瞭解更多信息。

+0

謝謝!我雖然(x,x)只會做x – user3051697

1

這是因爲substr()函數需要兩個參數,即要打印的字符串的起始位置和大小。因此,在第一次迭代時執行substr(0,0)並在另一次迭代時substr(1,1)輸出'e' 第3次迭代substr(2,2)輸出「lc」 substr(3,3) - 「com」 等.....

2

您正在使用substr錯誤。您應該用1替換第二個參數(x)。第二個參數是您想要「獲取」的字符數。所以text.substr(x,1); ,你會全部設置:)