【問題】
・コンソールから文字列を入力させ続けて、何も入力せずEnterを押すと、それまで入力した文字列の中から、5文字以上の単語以外のものがすべて表示されるようにプログラムを作りなさい。
・入力され続けていた文字列は、すべて一旦listに格納し、最後に5文字以上のものを削除してから表示しなさい
【欲しい結果】
文字列を入力:apple
文字列を入力:good
文字列を入力:pineapple
5文字未満の単語:good
下記箇所でエラーが出ていて、直し方が分かりません。
ヒントをいただきたいです。
size_t size = li[i].length();//ここで―エラが出ます。
【書いたコード】
#include <string>
#include <list>
using namespace std;
int main()
{
list<string> li;
string str{ "duumy" };
list<string>::iterator itr;
while (str != "") { cout << "文字列を入力:"; if (getline(cin, str) && !str.empty()) { li.push_back(str); } } unsigned int i; int str_size = 0; for (i = 0; i < li.size(); i++) { size_t size = li[i].length();//ここで―エラが出ます。 if (size < 5) { str_size = size; //cout << endl; //cout << "最大文字数:" << max_size <<" "; } } cout << endl; cout << "5文字未満の単語:"; for (itr = li.begin(); itr != li.end(); itr++) { if (str_size == li[i].length()) { cout << li[i] << " "; } } return 0;
}
すでに回答が出ていると思うのですが、どのような回答を望んでいるのでしょうか?
do~while文やautoが思いつかなかったので、もしそれらを使わずに今のコードを改造してできるのだったらそのやり方がいいなと思い回答をまだ求めているとしました。
「エラーが出ます」ではなく、そのエラーメッセージや現象等を「そのまま」(あなたの解釈抜きで)記して下さい。
エラーメッセージは、「何が起こったのか」のレポートであり、それを適切に読めればそれだけで問題が解決してしまったりすることもしばしば、なくらい重要な情報です。決して「エラーが出た」で捨ててしまってよい情報ではありません。(読み取るのに多少訓練が必要かも知れませんが...)
エラーメッセージは出なくて期待しない動作をする場合でも、「うまく動かない」ではなく、「(期待しないものであっても)どのように動いているのか」という情報はどのように間違っているのかについての重要なヒントになりうるものです。
質問をするのなら、それらをきちんと記載して下さい。
もう一つ、プログラムのソースコードはインデント(字下げ)をすることで非常に読みやすくなります(字下げが文法で決まっている言語もあります)。teratailでは、普通に記述した部分では字下げが失われますが、決まった手順を踏むことでインデントを保持したり、キーワードに色付したりすることができるようになっています。teratailのヘルプや https://teratail.com/questions/238564 を読んでみて下さい。
回答3件
あなたの回答
tips
プレビュー