2016-03-07 53 views
0

中生成函數調用錯誤,嘗試取一個字符串,並使用while循環將小寫字母替換爲特定數字(代碼中明顯的轉換)。在參考與string.replace一直盯着,不能看到我的格式是怎麼錯的string.replace在C++

#include <iostream> 
#include <cctype> 
#include <string> 

using namespace std; 

int main() { 

    // set variables 

    string input_string; 
    int string_length; 
    bool isupper; 
    bool isdig; 
    int count; 
    char current_var; 
    string output_string; 

    // Query user 

    cout << "Welcome to Josh's Password Generator. Enter a password and I will convert it into numbers for entry in a touchtone phone." << endl; 
    cin >> input_string; 



    // calculations 

    string_length = (int)input_string.length(); 
    count = 0; 


    while(count <= string_length) 

     if (input_string.at(count) == 'a' || input_string.at(count) == 'b' || input_string.at(count) == 'c') 
    { 
     current_var = 1; 
    } 
     else if (input_string.at(count) == 'd' || input_string.at(count) == 'e' || input_string.at(count) == 'f') 
    { 
     current_var = 2; 
    } 
    else if (input_string.at(count) == 'g' || input_string.at(count) == 'h' || input_string.at(count) == 'i') 
    { 
     current_var = 3; 
    } 
    else if (input_string.at(count) == 'j' || input_string.at(count) == 'k' || input_string.at(count) == 'l') 
    { 
     current_var = 4; 
     } 
     else if (input_string.at(count) == 'm' || input_string.at(count) == 'n' || input_string.at(count) == 'o') 
     { 
      current_var = 5; 
     } 
     else if (input_string.at(count) == 'p' || input_string.at(count) == 'q' || input_string.at(count) == 'r') 
     { 
      current_var = 6; 
     } 
     else if (input_string.at(count) == 's' || input_string.at(count) == 't' || input_string.at(count) == 'u') 
     { 
      current_var = 7; 
     } 
     else if (input_string.at(count) == 'v' || input_string.at(count) == 'w' || input_string.at(count) == 'x') 
     { 
      current_var = 8; 
     } 
     else if (input_string.at(count) == 'y' || input_string.at(count) == 'z') 
     { 
      current_var = 9; 
     } 
     else 
      current_var = input_string.at(count); 

     input_string = input_string.replace(count, current_var); 

     count = count + 1; 


    } 
+0

除了這個代碼沒有使密碼不易被猜出,你聽說過什麼'maps'或'switch'? –

+0

'std :: string :: replace'被設計用來代替一個子串與另一個字符串。在這裏,一個簡單的'input_string [count] = current_var;'就足夠了,因爲你只是替換一個字符。 – vu1p3n0x

回答

1

替換至少需要3 |:賦予與string.replace一個錯誤「爲號召‘取代’不匹配的成員函數。 。論據是你看錯documentation

你錯過長度參數,它表示字符串中的字符是如何被替換,而不是嘗試:?

input_string.replace(count, 1, string(current_var)); 

另外一個音符 - 「使用namespace std;'是not advisable