鱼C论坛

 找回密码
 立即注册
查看: 954|回复: 3

快速翻译 问题

[复制链接]
发表于 2021-12-29 17:37:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

atcay
jifsai
oopslay

输出
cat
eh
loops

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

  3. struct Entry {
  4.         char english[11];
  5.         char foreign[11];
  6. }entries[100005];

  7. void QuickSort(struct Entry *p, int s, int t) {    // 外语按顺序排序
  8.         int l = s, r = t;
  9.         struct Entry tmp;
  10.         if (s < t) {
  11.                 tmp = p[s];
  12.                 while (l != r) {
  13.                         while (r > l && p[r].foreign >= tmp.foreign)
  14.                                 r--;
  15.                         p[l] = p[r];
  16.                         while (l < r && p[l].foreign <= tmp.foreign)
  17.                                 l++;
  18.                         p[r] = p[l];
  19.                 }
  20.                 p[l] = tmp;
  21.                 QuickSort(p, s, l - 1);
  22.                 QuickSort(p, l + 1, t);
  23.         }
  24. }

  25. int main() {
  26.         int num = 0;
  27.         char word[11], ch;
  28.         while (1) {   // 输入
  29.                 scanf("%s%s", &entries[num].english, &entries[num].foreign);
  30.                 num++;
  31.                 getchar();
  32.                 ch = getchar();
  33.                 ungetc(ch, stdin);
  34.                 if (ch == '\n')
  35.                         break;
  36.         }

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

  44.         // 二分查找找出外语对应的英语
  45.         //while (scanf("%s", word) != EOF) {
  46.         //        int left = 0, right = num - 1;
  47.         //        int n = 0;
  48.         //        while (left <= right) {
  49.         //                int mid = left + (right - left) / 2;
  50.         //                n = strcmp(entries[mid].foreign, word);   // 比较
  51.         //                if (n < 0) {
  52.         //                        left = mid + 1;
  53.         //                }
  54.         //                else if (n > 0) {
  55.         //                        right = mid - 1;
  56.         //                }
  57.         //                else {
  58.         //                        printf("%s\n", entries[mid].english);
  59.         //                        break;
  60.         //                }
  61.         //        }
  62.         //        if (n) {
  63.         //                printf("eh\n");
  64.         //        }
  65.         //}
  66.         return 0;
  67. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-29 18:13:25 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-29 18:23:04 | 显示全部楼层
好像知道错在哪了。的确是快速排序错了,我这个是字符串比较,快速排序行不通...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-29 18:27:47 | 显示全部楼层
问题已经解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-21 18:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表