0

簡単な質問: 文字列パラメーターを受け入れ、スタックとベクターを使用して逆方向に出力しようとしています。ただし、Here you go! と表示された後、画面には何も出力されません。これまでにこれを扱ったことがないので、ベクターのセットアップに関係があると思います。これが問題のコードです。助けていただければ幸いです!

void main() {

stack<char> S;
string line;
vector<char> putThingsHere(line.begin(), line.end());
vector<char>::iterator it;

cout << "Insert a string that you want to see backwards!" << endl;
cin >> line;

for(it = putThingsHere.begin(); it != putThingsHere.end(); it++){
    S.push(*it);
}

cout << "Here you go! " << endl; 

while(!S.empty()) {
    cout << S.top();
    S.pop();
}

system("pause");


}
4

4 に答える 4

2

lineあなたのベクトルはまだ空のときに、初期化が早すぎます。の構造を、標準入力から文字列を抽出する命令のputThingsHere に移動します。

cin >> line;
vector<char> putThingsHere(line.begin(), line.end());

これは、修正されたプログラムが正しく実行されている実際の例です。

getline()の代わりに を使用していることに注意してcin >> lineください。これにより、文字間の空白を 1 つの文字列の一部として読み取ることができます。

これは、std::string標準のシーケンス コンテナーの要件を満たし、特にメンバー関数begin()を持ちend()std::string::iterator.

したがって、まったく必要なく、std::vector<>以下のスニペットがその役割を果たします。

getline(cin, line);
for(std::string::iterator it = line.begin(); it != line.end(); it++) {
    S.push(*it);
}
于 2013-03-28T18:34:55.057 に答える
2

変数lineは最初は空です。PutThingsHerevectorstackS.

置く

cout << "Insert a string that you want to see backwards!" << endl;
cin >> line;

vector<char> PutThingsHere(...)声明の前に。

于 2013-03-28T18:35:51.020 に答える
0

最初に読み込んlineでからputThingsTHere

stack<char> S;
string line;

cout << "Insert a string that you want to see backwards!" << endl;
cin >> line;
vector<char> putThingsHere(line.begin(), line.end());
vector<char>::iterator it;
于 2013-03-28T18:35:31.460 に答える
0

私はあなたがstd::stringすでに使っています。なぜ使わないのですか:

`std::string reversed(line.rend(), line.rbegin());`
于 2013-03-28T18:38:01.410 に答える