私は、ユーザーから与えられた文字列を反復処理する方法を考えています。サイコロの動きと関係があります。フォーマット:xdy [z]ここで、xは時間が丸められ、dyはダイスタイプであり、zは整数です。文字列を繰り返すC++
形式は次のとおりです.1999(x)の数字、次にdと特定の数字[ダイスタイプ](4,6,12,20,100から選んだ5つだけ)、そして1から100までの数字の角かっこ...など、いくつかの例はこのように見えます... 1d4 [57] 、889d20 [42]、43d4 [4]、1d4 [1] - 999d100 [100]は6文字と12文字の間の文字の範囲です。私はこれについてどうやって行くのか分からない、今ここにいるものがあるが、これについてもっと良い方法があるようだ。ユーザーから受け取った入力は、正規表現を使用して検証されており、形式が正しいことを確認します。私はベクトル配列に値を格納し、最後にすべてを連結したいと考えました。
void rollDie(std::string input)
{
int bracketCount;
std::vector<int> timesRolled;
std::vector<int> diceType;
std::vector<int> additional;
bool d = false;
bool bc = false;
for (int i = 0; i < input.length; i++) //or length - 1
{
if (isdigit(input[i]))
{
if (bool d = false)
{
timesRolled.push_back(input[i]);
}
}
if(isalpha(input[i]))
{
d = true;
}
if (isdigit(input[i]))
{
if (d = true)
{
diceType.push_back(input[i]);
}
}
if (!isalpha(input[i]) && !isdigit(input[i]))
{
bracketCount++;
bc = true;
if (bracketCount = 2) break;
}
if (isdigit(input[i]))
{
if (bc = true)
{
additional.push_back(input[i]);
}
}
}
}
''(D = TRUE)であれば、 ''(bracketCount = 2)の場合と '(BCは= TRUE)場合には'、おそらく正しいことができません。これらの 'if'チェックはすべて代入されており、新しい値が真理値であるかどうかをテストします(これはすべての場合に当てはまります)。 'if(d = false)'は同じですが、割り当てが偽であるため、テストは常に失敗します。 – ShadowRanger
RegExを使用して検証する場合、正規表現を使用して数値を取得するのはなぜですか? – Elyasin
以下の回答がうまくいかない場合は、フィードバックをお寄せください。それが動作する場合は、/ upvoteを受け入れてください。 –