文字列に文字を渡していますが、関数を使って文字列内の文字を混乱させていますが、文字列の先頭にある文字列はシンボルのアクセント付き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);
}
あなたは、出力例を投稿できますか? –
''£ ''はASCIIで定義されていないことに注意してください。この文字はUnicodeとして正しく解釈されるためには幅がある必要があります。簡単にするために、それを完全に省略する方が良いかもしれません。 – cdhowie
この例題では ''£ ''を省略し、' // Symbols'のモジュロを減らすと期待される出力を生成します。定数の代わりに 'sizeof'を使うことを考えてください。 –