1

回文関数を作成しようとしています。文字列を取得して、キュー、スタックに配置する必要があります。次に、それらが回文であるかどうかを比較します。私の関数では、スペースを削除し、すべての文字を小文字に変換しました。現在、STACK と QUEUE を比較して、指定された単語が回文であるかどうかを確認しようとしています。しかし、「void 型の値を文字型のエンティティに割り当てることはできません」というエラー メッセージが表示されるため、そうすることができません。可能であれば、私が間違っていることを教えてください。

enter bool isPalindrome(string s){
//lowers all letters to lower case so it will not be case sensetive
for (int i = 0; i < s.length(); i ++)
    s[i] = tolower(s[i]);

 //removes white space from the word that is being checked
char c;
int i = 0;
while (s[i])
{
    c=s[i];
    if (isspace(c)) c='\n';
    putchar (c);
    i++;
}

queue<string> q1;
stack<string> s1;
for (int k = 0; k < s.size(); k++) 
    if (isalpha(s[k]))
        q1.push(s);

for (int u = 0; u < s.size(); u++)
    if (isalpha(s[u]))
        s1.push(s);
char e;
char d;
while (q1.size() > 0 )
     e = q1.pop();
     d = s1.pop();
    if (e != d)
        return false;
    else
    return true;

}
4

1 に答える 1

2

pop()を返すvoidため、エラーになります。最初にコンテナから値を取得し、次にコンテナから値を取得する必要がありますpoptopforstd::stackおよびfrontor backforを使用する必要があることに注意してくださいstd::queue

e = q1.front();
q1.pop();
d = s1.top();
s1.pop();

編集:私が見落としたもう 1 つの問題は、文字列全体をキュー (およびスタック) に格納し、それらを char にポップしようとしていることです。したがって、おそらくやりたかったことは次のようなものです。

std::queue<char>
std::stack<char>
for (int k = 0; k < s.size(); k++) 
    if (isalpha(s[k]))
        q1.push(s[k]);

for (int u = 0; u < s.size(); u++)
    if (isalpha(s[u]))
        s1.push(s[u]);

スタックについても同じです。

EDIT2 : もう 1 つの欠けているビットは最後にありwhileます。ループを括弧で囲み、return trueステートメントをループの後に置く必要があります。

while (q1.size() > 0 ) {
    e = q1.front();
    q1.pop();
    d = s1.top();
    s1.pop();
    if (e != d)
        return false;
}
return true;
于 2012-10-22T00:14:31.240 に答える