1

コマンドラインで文字列を受け入れ(例:$ test.out "This is a string")、文字列を調べて動詞(および名詞、でも、動詞が分かれば、名詞は自分でできます。)

アルファベット順でソートされた動詞のリストはファイル lexicon.h にあり、これを辞書として使用することになっています。

コマンドラインから文字列を受け取り、その入力を使用して文字列の配列を作成する方法を知っています。各文字列自体は個別の単語であり、それを実行できる作業プログラムが既にあり、その一部を使用したいと考えていますこれのために。

binary_search(...stuffgoeshere...) という関数を作成し、それを使用して辞書ファイルを検索し、動詞を見つけることになっています。

既に分離された単語が lexicon.h. 私は誰かにただ答えを書いてほしくありません。うまくいけば、私はこれから何か楽しいことを学ぶことができます!

私はそれが面倒であることを知っていますが、これは私が今のところ持っているものです。

また、lexicon の verb 配列には 637 の値があることに注意してください (int サイズ = 637 にしたときに見られるように)。クラスの例で使用されているバイナリ検索関数を変更しようとしていますが、文字列ではなく、テキスト ファイル内の数字を並べ替えています。

他に含めるべきものがある場合は、お知らせください。ご協力ありがとうございました!

    #include <stdio.h>
    #include <string.h>
    #include "lexicon.h"

    int binary_search(char word[], char verbs[][], int size);

    int
    main(int argc, char*argv[])
    {
            char word[80];
            char str[80],
                 args[80][80];
            int counter = 0,
                a = 0,
                i = 0,
                index = 0,
                t = 0;
            while(str[a] != '\0')
            {
                    if(str[a] == ' ')
                    {
                            args[index][i] = '\0';
                            i = 0;
                            a++;
                            index ++;
                            counter ++;
                    }
                    args[index][i++] = str[a++];
            }
            args[index][i] = '\0';
            counter = counter + 1;
            printf("\nThe verbs were: ");
            int verbposition= -1;
         int size = 637;
            while(t<counter)
            {
                    strcpy(word, args[t]);
                    verbposition = binary_search(word, verbs, size);

                    if(verbposition > -1)
                            printf("%s", args[t]);

                    t++;

            }

            return 0;
    }

    int
    binary_search(char word[], char &verbs[][], int size)
    {
            int bottom = 0,
      top = size - 1,
                found = 0,
                middle;
            while(bottom <= top && !found)
            {
                    middle = (bottom + top) / 2;

                    if(strcmp(word, verbs[middle]))
                    {
                            found = 1;
                            return = middle;
                    }
                    if(strcmp(word, verbs[middle]) > 0)
                    {
                            top = middle - 1;
                    }
                    else
                            bottom = middle + 1;   
     }
            return -1;
    }
4

1 に答える 1

0

あなたは正しい軌道に乗っています。どこが間違っているのかが明確になるので、printステートメントを使用することを強くお勧めします。

于 2013-05-25T02:05:43.460 に答える