a327904410 发表于 2021-12-29 17:37:11

快速翻译 问题

左边是英文,右边是外语,需要将外语转化成英语,如果没有则输出eh。这里用了二分查找。但我好像在快速排序中出了错误,不知道是不是?大佬帮我看看,然后下面注释的代码是二分查找
输入
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay

atcay
jifsai
oopslay

输出
cat
eh
loops

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

struct Entry {
        char english;
        char foreign;
}entries;

void QuickSort(struct Entry *p, int s, int t) {    // 外语按顺序排序
        int l = s, r = t;
        struct Entry tmp;
        if (s < t) {
                tmp = p;
                while (l != r) {
                        while (r > l && p.foreign >= tmp.foreign)
                                r--;
                        p = p;
                        while (l < r && p.foreign <= tmp.foreign)
                                l++;
                        p = p;
                }
                p = tmp;
                QuickSort(p, s, l - 1);
                QuickSort(p, l + 1, t);
        }
}

int main() {
        int num = 0;
        char word, ch;
        while (1) {   // 输入
                scanf("%s%s", &entries.english, &entries.foreign);
                num++;
                getchar();
                ch = getchar();
                ungetc(ch, stdin);
                if (ch == '\n')
                        break;
        }

        QuickSort(entries, 0, num - 1);// 快速排序
       
        // 这个是查看快速排序的结果
        int i;
        for (i = 0; i < num; i++) {
                printf("%s %s\n", entries.english, entries.foreign);
        }

        // 二分查找找出外语对应的英语
        //while (scanf("%s", word) != EOF) {
        //        int left = 0, right = num - 1;
        //        int n = 0;
        //        while (left <= right) {
        //                int mid = left + (right - left) / 2;
        //                n = strcmp(entries.foreign, word);   // 比较
        //                if (n < 0) {
        //                        left = mid + 1;
        //                }
        //                else if (n > 0) {
        //                        right = mid - 1;
        //                }
        //                else {
        //                        printf("%s\n", entries.english);
        //                        break;
        //                }
        //        }
        //        if (n) {
        //                printf("eh\n");
        //        }
        //}
        return 0;
}

吃点烤鱼 发表于 2021-12-29 18:13:25

{:5_91:}

a327904410 发表于 2021-12-29 18:23:04

好像知道错在哪了。的确是快速排序错了,我这个是字符串比较,快速排序行不通...{:10_266:}

a327904410 发表于 2021-12-29 18:27:47

问题已经解决了{:10_256:}
页: [1]
查看完整版本: 快速翻译 问题