2017-04-14 6 views
2

文字列に文字を渡していますが、関数を使って文字列内の文字を混乱させていますが、文字列の先頭にある文字列はシンボルのアクセント付きU数字の%記号ですが、文字は影響を受けません。特殊文字と数字の文字が奇妙な値として出力される

 char holdChar = symbols[RNG]; 

これはchar holdChar = numbers[RNG];

としても次のようになります。感謝:)

#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

この例題では ''£ ''を省略し、' // Symbols'のモジュロを減らすと期待される出力を生成します。定数の代わりに 'sizeof'を使うことを考えてください。 –

答えて

0

あなたの誤差が終わり

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

でループの最後には、特にこのラインヘルプコメントで「£」がアスキー文字ではないのでコードから削除する必要があることが指摘されましたアクター。

+0

母は大丈夫ですが、あなたは私のためにそれを指摘するために非常に多くの!すべてが今働いています:) – Kingpin

+0

もしそれが@Kingpinを働かせたら答えとしてマークしてください – chbchb55

関連する問題