2017-04-14 140 views
2

我正在將字符傳遞到字符串中並使用函數混淆字符串中的字母,但是從主頂部的數組中抓取的字符正在作爲符號的重音符號打印並且數字的%符號,但是字母不受影響。幫助表示讚賞:)打印奇怪值的特殊字符和數字字符

#include <iostream> 
#include <string> 

using namespace std; 

void scrambleString(string str) 
{ 
    int x = str.length(); 
    for (int y = x; y > 0; y--) 
    { 
     int pos = rand() % x; 
     char tmp = str[y - 1]; 
     str[y - 1] = str[pos]; 
     str[pos] = tmp; 
    } 
    cout << str; 
} 

int main() 
{ 
    // Arrays for RNG to work with // 
    char letters[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 
     'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 
     's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; 

    char symbols[] = { '!', '£', '$', '%', '&', '*', '@', '~' }; 

    char numbers[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9' }; 

    // Other Variables // 
    int letterIn; 
    int specialIn; 
    int numberIn; 
    string randomPass; 
    string holdString; 

    cout << "No of Letters: "; 
    cin >> letterIn; 
    cout << "No of Special char: "; 
    cin >> specialIn; 
    cout << "No of Numbers: "; 
    cin >> numberIn; 

    // Letters 
    for (int i = 0; i < letterIn; i++) 
    { 
     int RNG = rand() % 26; 
     char holdChar = letters[RNG]; 
     // Convert to String 
     holdString.insert(i, 1, holdChar); 

    } 
    // Symbols 
    for (int i = 0; i < specialIn; i++) 
    { 
     int RNG = rand() % 8; 
     char holdChar = symbols[RNG]; 
     // Convert to String 
     holdString.insert(letterIn, 1, holdChar); 
    } 
    // Numbers 
    for (int i = 0; i < numberIn; i++) 
    { 
     int RNG = rand() % 8; 
     char holdChar = symbols[RNG]; 
     // Convert to String 
     holdString.insert(letterIn+specialIn, 1, holdChar); 
    } 
    cout << holdString << endl; 
    scrambleString(holdString); 
} 
+2

請問您可以發佈一個示例輸出嗎? –

+3

請注意,''''沒有在ASCII中定義;這個字符可能需要很寬才能正確解釋爲Unicode。爲了簡單起見,最好完全省略它。 – cdhowie

+0

這個例子產生我期望的輸出,如果我省略''''''並且減少'//符號'中的模匹配。考慮使用'sizeof'而不是常量。 –

回答

0

你的錯誤是在最後的for循環末

// Numbers 
    for (int i = 0; i < numberIn; i++) 
    { 

明確這一行:

 char holdChar = symbols[RNG]; 

這應該是char holdChar = numbers[RNG];

也可作爲在評論'£'中指出需要從你的代碼中刪除,因爲它不是一個ASCII字符ACTER。

+0

哈哈好吧,事實證明這是一個愚蠢的錯誤,但感謝你非常想爲我指出來!一切正在工作:) – Kingpin

+0

請標記爲答案,如果它的工作@Kingpin – chbchb55