vector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラム

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あや
記事: 27
登録日時: 3ヶ月前

vector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラム

#1

投稿記事 by あや » 3週間前

C++でテキストファイルを読みvector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラムを作成しています.
辞書順にソートを行った後に、探索単語の受け付けと探索の実行を繰り返すループを入れたいです.探索は終了指示マーク($$)を受け付けるまで繰り返します.
以下のコードまで書いたのですが,binary_search(vector.begin(), vector.end(), a);の部分に「main関数は'void'型として宣言されていますが、値を返しました」というエラーが出ます.コードをどのように修正したらよいでしょうか?また,他にも直したらよいところはありますか?教えてください.よろしくお願いします.

コード:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

//メイン関数
void main() {

    ifstream inFile;      //入力ファイル
    string word;          //単語
    vector<string> vector;//vector配列

    //入力ファイルを開く
    inFile.open("test.txt");

    // 入力ファイルが開けなければ終了する
    if (!inFile) {
        cout << "入力ファイルを開けません" << endl;
        return;
    }

    //ファイルから単語を読み込む
    inFile >> word;

    //ファイルの末尾でなければ、以下の処理を繰り返す
    while (!inFile.eof()) {

        //単語を格納する
        vector.push_back(word);

        //新しい単語を読み込む
        inFile >> word;
    }

    //vector配列に格納した単語を、辞書順にソートする
    sort(vector.begin(), vector.end());

    char a;
    cout << "探索単語?";
    cin >> a;
    while (a == '$$') {

        return binary_search(vector.begin(), vector.end(), a);
        if(true){
            cout << "存在する" << endl;
        }
        else {
            cout << "存在しない" << endl;
        }
    }
}

Rittai_3D
記事: 524
登録日時: 7年前

Re: vector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラム

#2

投稿記事 by Rittai_3D » 3週間前

https://teratail.com/questions/224311 に同じ質問があったので参考にしてみてください。

パッと見たところ、ツッコミどころは4箇所ありました。コンパイルしてないのでそれ以外の問題はわかりません。
初心者です

あや
記事: 27
登録日時: 3ヶ月前

Re: vector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラム

#3

投稿記事 by あや » 3週間前

4箇所というのは、具体的にどの部分か教えて頂きたいです。よろしくお願いします。

アバター
みけCAT
記事: 6246
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: vector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラム

#4

投稿記事 by みけCAT » 3週間前

自覚しているbinary_searchの所を除くと、
  • 戻り値の型がintでないmain関数をグローバルで宣言しているので、C++として不正
  • 「探索単語」の入力に1文字しか格納できないchar型を使用している
  • 複数文字の文字定数'$$' (値は処理系定義) を使用している
  • if文の条件式がtrueになっており、分岐にならない
の4箇所でしょうか?
ループ内でaが更新されず無限ループになるという問題もあるので、
if文の条件式とどっちがツッコミどころか怪しいですね。
また、ループの条件の比較演算子も、逆の方が良さそうです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

あや
記事: 27
登録日時: 3ヶ月前

Re: vector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラム

#5

投稿記事 by あや » 3週間前

コードを以下のように修正したのですが,
if (!inFile) {
cout << "入力ファイルを開けません" << endl;
return;
}
のreturnの部分に「'main': 関数が値を戻すように宣言されていますが、関数定義に 'return' ステートメントがありません」というエラーが出ます.エラーを消すには,コードをどのように修正したらよいでしょうか?
また,ifが正しく分岐されるようにするには,trueのところをどのような条件式に変えたら良いでしょうか?
他にもおかしいところがあったら教えてください.
よろしくお願いします.

コード:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

//メイン関数
int main() {

	ifstream inFile;      //入力ファイル
	string word;          //単語
	vector<string> vector;//vector配列

	//入力ファイルを開く
	inFile.open("test.txt");

	// 入力ファイルが開けなければ終了する
	if (!inFile) {
		cout << "入力ファイルを開けません" << endl;
		return;
	}

	//ファイルから単語を読み込む
	inFile >> word;

	//ファイルの末尾でなければ、以下の処理を繰り返す
	while (!inFile.eof()) {

		//単語を格納する
		vector.push_back(word);

		//新しい単語を読み込む
		inFile >> word;
	}

	//vector配列に格納した単語を、辞書順にソートする
	sort(vector.begin(), vector.end());

	string a;
	
	while ("$$"==a ) {
		cout << "探索単語?";
		cin >> a;
		binary_search(vector.begin(), vector.end(), a);
		
		if(true){
			cout << "存在する" << endl;
		}
		else {
			cout << "存在しない" << endl;
		}
	}
}

Rittai_3D
記事: 524
登録日時: 7年前

Re: vector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラム

#6

投稿記事 by Rittai_3D » 2週間前

https://teratail.com/questions/224311
rules#board-rule-1-5
ご本人様ですよね?
ルールを読んで守ってください。
みけCAT さんが書きました:
3週間前
自覚しているbinary_searchの所を除くと、
  • 戻り値の型がintでないmain関数をグローバルで宣言しているので、C++として不正
  • 「探索単語」の入力に1文字しか格納できないchar型を使用している
  • 複数文字の文字定数'$$' (値は処理系定義) を使用している
  • if文の条件式がtrueになっており、分岐にならない
の4箇所でしょうか?
みけCATさんの指摘した部分がそうです。
あや さんが書きました:
3週間前
コードを以下のように修正したのですが,
if (!inFile) {
cout << "入力ファイルを開けません" << endl;
return;
}
のreturnの部分に「'main': 関数が値を戻すように宣言されていますが、関数定義に 'return' ステートメントがありません」というエラーが出ます.エラーを消すには,コードをどのように修正したらよいでしょうか?
適切な位置にreturn文を書いて、その際に適切な戻り値を返せば良いと思います。
初心者です

あや
記事: 27
登録日時: 3ヶ月前

Re: vector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラム

#7

投稿記事 by あや » 2週間前

コードのどの部分にreturn文を書けば良いのでしょうか?
また、適切な戻り値を返すにはコードをどのように修正したら良いでしょうか?教えてください。よろしくお願いします。

アバター
あたっしゅ
記事: 261
登録日時: 9年前
住所: 東京23区
連絡を取る:

Re: vector配列に格納した単語に、二分探索を適用して、指定された単語を検索するプログラム

#8

投稿記事 by あたっしゅ » 2週間前

二分木を実装するのかと思ってたら、STL 呼ぶだけかよ。

string a; だから "$$"==a は、いいんでねぇ ?

コード:

if( ! inFile )  {
    cout << "入力ファイルを開けません" << endl;

    return EXIT_FAILURE; // 入力ファイルが読めなかったので、不正終了。
}

コード:

        if( binary_search(vector.begin(), vector.end(), a) ) {
            cout << "存在する" << endl;
        } else {
            cout << "存在しない" << endl;
        }
    }

    return EXIT_SUCCESS; // 正常終了
}

コード:

#include <cstdlib>
を忘れずに。

こんな感じか ?
コンパイルして実行したモノではありません。
手提鞄あたっしゅ、[MrAtassyu] http://ameblo.jp/mratassyu/
手提鞄屋魚有店(てさげかばんやうおありてん)
レスがついていないものを優先して、レスしています。時々、見当外れなレスをします。

返信

“C言語何でも質問掲示板” へ戻る