A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马-唐磊 于 2014-5-22 13:43 编辑

说明:在这题之前我已经出了一题,大家答这题之前可以做下那个题,那个题的部分逻辑这道题中会用到。http://bbs.itheima.com/forum.php ... mp;extra=#pid742205
已知有字符char a[]="select * from (select * from  heima1, (select c, d from  temp1 t1,(select g from   heima1 h1,temp1 t where g=1) t2 where t1.a=t2.b and t1 in (select f from itcast  )))";
学过sql的同学可以看出上面是一个sql语句,含有子查询嵌套的sql,在oracle数据库开发中可能一条sql就是几千行,有时候需要对其中的表和字段进行分析,要找出其中的表名,也就是把里面的表名提取出来,用from关键字来查表显然很麻烦,现在就需要一个程序很方便将表名提取出来。下面是条件
1,写一个程序找出所有表名
2,表名不能有重复
3,只取出表名它的别名不要弄出来比如temp t1只取出temp
4,最后结果按字母顺序排序。
执行结果如下即正确
heima1
itcast
temp1
著名:上面sql逻辑不要管它肯定会产生笛卡尔积,另外此题如不严谨后面会完善


点评

不是ios方向的就不要在这里浑水摸鱼嘛,昂?  发表于 2014-5-22 16:13

6 个回复

倒序浏览
本帖最后由 奇迹 于 2014-5-22 14:42 编辑

太简单不想写,
select table_name from user_tables
一句sql搞定,表名根本一般重复,
教你个重复的办法,
那就是加个distint
回复 使用道具 举报
楼上的哥们可能没搞懂题意。。。
我随便写了写下面是代码,虽然方法有点勉强,不过还算得出答案了
  1. //
  2. //  main.c
  3. //  一道无聊的题
  4. //
  5. //  Created by sniper-yj on 14-5-22.
  6. //  Copyright (c) 2014 itcast. All rights reserved.
  7. //

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

  10. char a[]={"select * from (select * from heima1,(select c, d from  temp1 t1,(select g from   heima1 h1,temp1 t where g=1) t2 where t1.a=t2.b and t1 in (select f from itcast  )))"};
  11. char b[10][10];

  12. int main()
  13. {
  14.     int n = 0,i,j,x,y;
  15.     for (i = 0; i < strlen(a); i++)
  16.     {
  17.         if(a[i] == 'm'&&a[i+1] == ' '&&a[i+2]!='(')
  18.         {
  19.             int m = 0;
  20.             for (j = i+2; j < strlen(a); j++)
  21.             {
  22.                 if(a[j]!=' ')
  23.                 {
  24.                     b[n][m++] = a[j];
  25.                     if(a[j+1]==' '||a[j+1]==',')
  26.                     {
  27.                         break;
  28.                     }           
  29.                 }
  30.                
  31.             }
  32.             n++;              
  33.         }
  34.     }
  35.     for (x = 0; x < n; x++)
  36.     {
  37.         printf("%s\n",b[x]);
  38.     }
  39.     return 0;
  40. }
复制代码


最后我的输出结果是
heima1
temp1
heima1
itcast
因为算出这部这道题基本没问题了,只需要对输出的值进行判断对首字母进行排序就可得出楼主的答案了,不过实在是不想写了,还要看oc视频呢。再给楼主一个建议,既然要学习oc就不用去专这些没用的题,因为oc不可能会用到这些知识,还是好好看看面向对象思想还有什么foundatation框架之类的才会更有好处。
回复 使用道具 举报
就是的,表示看不懂哦
回复 使用道具 举报
技术没到家,表示看不懂
回复 使用道具 举报
这是什么方向的题??
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马