鱼C论坛

 找回密码
 立即注册
查看: 2673|回复: 7

指针练习

[复制链接]
发表于 2015-3-22 11:07:55 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 haiouda 于 2015-3-22 11:19 编辑

/****************************************************************************************************************************************
在主函数中输入10个等长的字符串。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。

上题也可改为:在主函数中输入10个字符串(不限制是否等长)。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。
*****************************************************************************************************************************************/

上面这题是课后习题;
完成上面这题目,我是用了全局变量,才解决的;

请问,在不用全局变量的情况下,如何能做出上面的题目来,谢谢

最佳答案

查看完整内容

不知道楼主的10个等长字符串是怎么存放的,不过既然等长,而且数量又这么大,我就姑且猜测楼主的字符串是放在一个二元的字符数组里的吧 c语言凭记得的和网上查的东西写的,如果有语法错误,就看看思路就好了~~ 那么函数如下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-3-22 11:07:56 | 显示全部楼层
不知道楼主的10个等长字符串是怎么存放的,不过既然等长,而且数量又这么大,我就姑且猜测楼主的字符串是放在一个二元的字符数组里的吧
c语言凭记得的和网上查的东西写的,如果有语法错误,就看看思路就好了~~
那么函数如下
  1. int *str_sort(str[10][30])
  2. {
  3.         int seq[10]  #用于存放十个字符串的次序
  4.         int i,j,temp
  5.         for(i = 0;i < 10; i++)seq[i] = i;  #初始化字符串顺序
  6.         for(i = 9, j = 0;i > 0;i-- )  #冒泡排序,seq数组存放字符串顺序
  7.                 for(j = 0;j < i;j++)
  8.                         if(strcmp(str[j],str[j + 1]) < 0)
  9.                         {
  10.                                 temp = seq[j]
  11.                                 seq[j] = seq[j + 1]
  12.                                 seq[j + 1] = temp
  13.                         }
  14.         return seq
  15. }

  16. void main()
  17. {
  18.         # 定义并输入十个字符串存入数组str[10][30]
  19.         int *sequence;
  20.         sequence = str_sort(str[10][30])
  21.         for(int i = 0;i <10;i++)
  22.                 printf("%s",str[seq[i]])
  23. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-3-22 16:10:13 | 显示全部楼层
你说的到底什么意思?
输在一个数组?
还是分开的数组?
排序怎么排?是星号的个数?从小到大?
说话能说清初么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-3-22 19:53:21 | 显示全部楼层
语文不好,给几个例子!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-3-22 21:18:19 | 显示全部楼层
:call:看着鱼兄的鱼币,想要。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-3-23 01:04:24 | 显示全部楼层
lightninng 发表于 2015-3-22 21:39
不知道楼主的10个等长字符串是怎么存放的,不过既然等长,而且数量又这么大,我就姑且猜测楼主的字符串是放 ...
  1. /**********************************************************************************************
  2. 在主函数中输入10个等长的字符串。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。
  3. **********************************************************************************************/
  4. #if(0)
  5. #include <stdio.h>
  6. #include <string.h>
  7. int main()
  8. {
  9.         void sort(char s[][20]);
  10.         int i;
  11.         char str[10][20];
  12.         printf("input 10 strings:\n");
  13.         for (i=0;i<10;i++)
  14.                 scanf("%s",str[i]);
  15.         sort(str);
  16.         printf("Now,the sequence is:\n");
  17.         for (i=0;i<10;i++)
  18.                 printf("%s\n",str[i]);
  19.         return 0;
  20. }

  21. void sort(char s[][20])
  22. {
  23.         int i,j;
  24.         char *p,temp[20];
  25.         p=temp;
  26.         for (i=0;i<9;i++)
  27.                 for (j=0;j<9-i;j++)
  28.                         if (strcmp(s[j],s[j+1])>0)
  29.                         {
  30.                                 strcpy(p,s[j]);
  31.                                 strcpy(s[j],s[+j+1]);
  32.                                 strcpy(s[j+1],p);
  33.                         }
  34. }



  35. #endif







  36. #if(1)

  37. #include <stdio.h>
  38. #include <string.h>
  39. int main()
  40. {
  41.         void sort(char (*p)[6]);
  42.         int i;
  43.         char str[10][6];
  44.         char (*p)[6];                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
  45.         printf("input 10 strings:\n");
  46.         for (i=0;i<10;i++)
  47.                 scanf("%s",str[i]);
  48.         p=str;
  49.         sort(p);
  50.         printf("Now,the sequence is:\n");
  51.         for (i=0;i<10;i++)
  52.                 printf("%s\n",str[i]);
  53.         return 0;
  54. }

  55. void sort(char (*s)[6])
  56. {
  57.         int i,j;
  58.         char temp[6],*t=temp;
  59.         for (i=0;i<9;i++)
  60.                 for (j=0;j<9-i;j++)
  61.                         if (strcmp(s[j],s[j+1])>0)
  62.                         {
  63.                                 strcpy(t,s[j]);
  64.                                 strcpy(s[j],s[+j+1]);
  65.                                 strcpy(s[j+1],t);
  66.                         }
  67. }



  68. #endif











  69. #if(0)
  70. #include <stdio.h>
  71. #include <string.h>
  72. char *a[10];                 //全局变量,目的是在调用后返回时,指针的指向也跟着变化

  73. int main()
  74. {
  75.         void px(char *c[],int n);
  76.         char b[10][20]={0},temp;
  77.         int i,j,k,n=10;
  78.        
  79.         for (i=0,k=0; i<10; i++,k++)      //字符串输入
  80.         {
  81.                 a[k]=b[i];
  82.                 for(j=0;j<20;j++)
  83.                 {
  84.                         temp=getchar();
  85.                         if(temp=='\n')
  86.                         {
  87.                                 b[i][j]='\0';
  88.                                 break;
  89.                         }
  90.                         b[i][j]=temp;
  91.                        
  92.                 }
  93.         }
  94.        
  95.         for (i=0;i<10;i++)            //打印输入的字符串
  96.         {
  97.                 if(i%5==0)
  98.                         printf("\n");
  99.                 printf("%10s",b[i]);         //这里b[i]换成a[i]输出是一样的,因为这时a[i]指向b[i]
  100.         }
  101.         printf("\n\n");
  102.        
  103.        
  104.         px(a,10);        // 调用实参把数组调入                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
  105.        
  106.        
  107.         for(i=0;i<10;i++)                         //打印排序后的,字符口串                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  108.         {
  109.                 if(i%5==0)
  110.                         printf("\n");
  111.                 printf("%10s",b[i]);       // 这里用的是b[i]即打印数组,因为数组里字符位置没变所以原样输出
  112.         }
  113.        
  114.        
  115.         printf("\n\n");
  116.        
  117.         for (i=0;i<10;i++)            //打印排序后的,字符口串(指针)
  118.         {
  119.                 if(i%5==0)
  120.                         printf("\n");
  121.                 printf("%10s",a[i]);         //这里用工a[i]即用指针,指针已经重新排序了,所以打印排序后的结果
  122.         }
  123.        
  124.         printf("\n\n");
  125.        
  126.         return 0;
  127.        
  128.        
  129. }


  130. void px(char *c[],int n)
  131. {
  132.         int i,k;
  133.         char *temp;
  134.         for (i=n-1;i>=0;i--)
  135.         {
  136.                 for (k=0;k<i;k++)
  137.                 {
  138.                         if(strcmp(c[k],c[k+1])>0)    //指针所指字符串比较(排序)
  139.                         {
  140.                                 temp=c[k];           //指针地址交换
  141.                                 c[k]=c[k+1];
  142.                                 c[k+1]=temp;
  143.                                
  144.                                
  145.                         }
  146.                        
  147.                 }
  148.         }
  149.        
  150.        
  151. }
  152. #endif













  153. #if(0)

  154. #include <stdio.h>
  155. #include <string.h>
  156. char b[10][20]={0};  // 全局变量数组,目的在调用函数后,数组本体已经排过序了

  157. int main()
  158. {
  159.         void px(char d[][20],int n);
  160.         char *a[10],temp;
  161.         int i,j,k,n=10;
  162.        
  163.         for (i=0,k=0; i<10; i++,k++)      //字符串输入
  164.         {
  165.                 a[k]=b[i];
  166.                 for(j=0;j<20;j++)
  167.                 {
  168.                         temp=getchar();
  169.                         if(temp=='\n')
  170.                         {
  171.                                 b[i][j]='\0';
  172.                                 break;
  173.                         }
  174.                         b[i][j]=temp;
  175.                        
  176.                 }
  177.         }
  178.        
  179.         for (i=0;i<10;i++)            //打印输入的字符串
  180.         {
  181.                 if(i%5==0)
  182.                         printf("\n");
  183.                 printf("%10s",b[i]);         //这里b[i]换成a[i]输出是一样的,因为这时a[i]指向b[i]
  184.         }
  185.         printf("\n\n");
  186.        
  187.         px(b,10);        // 调用实参把数组调入                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
  188.        
  189.         for(i=0;i<10;i++)                         //打印排序后的,字符口串(数组)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  190.         {
  191.                 if(i%5==0)
  192.                         printf("\n");
  193.                 printf("%10s",b[i]);
  194.         }
  195.        
  196.         printf("\n\n");
  197.        
  198.         for (i=0;i<10;i++)            //打印排序后的,字符口串(指针)
  199.         {
  200.                 if(i%5==0)
  201.                         printf("\n");
  202.                 printf("%10s",a[i]);
  203.         }
  204.        
  205.         printf("\n\n");
  206.        
  207.         return 0;
  208.        
  209.        
  210. }

  211. void px(char d[][20],int n)
  212. {
  213.         int i,k;
  214.         char temp[20];
  215.         for (i=n-1;i>=0;i--)
  216.         {
  217.                 for (k=0;k<i;k++)
  218.                 {
  219.                         if(strcmp(d[k],d[k+1])>0)    //字符串比较,并排序
  220.                         {
  221.                                 strcpy(temp,d[k]);       //字符串复制
  222.                                 strcpy(d[k],d[k+1]);
  223.                                 strcpy(d[k+1],temp);
  224.                         }
  225.                        
  226.                 }
  227.         }
  228.        
  229.        
  230. }
  231. #endif









  232. #if(0)
  233. #include <stdio.h>
  234. #include <string.h>


  235. int main()
  236. {
  237.         char *px(char *c[],int n),*w;
  238.         char *a[10],b[10][20]={0},temp;
  239.         int i,j,k,n=10;
  240.        
  241.         for (i=0,k=0; i<10; i++,k++)      //字符串输入
  242.         {
  243.                 a[k]=b[i];
  244.                 for(j=0;j<20;j++)
  245.                 {
  246.                         temp=getchar();
  247.                         if(temp=='\n')
  248.                         {
  249.                                 b[i][j]='\0';
  250.                                 break;
  251.                         }
  252.                         b[i][j]=temp;
  253.                        
  254.                 }
  255.         }
  256.        
  257.         for (i=0;i<10;i++)            //打印输入的字符串
  258.         {
  259.                 if(i%5==0)
  260.                         printf("\n");
  261.                 printf("%10s",b[i]);         //这里b[i]换成a[i]输出是一样的,因为这时a[i]指向b[i]
  262.         }
  263.         printf("\n\n");
  264.        
  265.        
  266.        
  267.        
  268.         w=px(a,10);        // 调用实参把数组调入                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
  269.        
  270.        
  271.        
  272. #if(0)
  273.         for(i=0;i<10;i++)                         //打印排序后的,字符口串                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  274.         {
  275.                 if(i%5==0)
  276.                         printf("\n");
  277.                 printf("%10s",b[i]);       // 这里用的是b[i]即打印数组,因为数组里字符位置没变所以原样输出
  278.         }
  279. #endif
  280.        
  281.         printf("\n\n");
  282.        
  283.        
  284.        
  285.        
  286.         for (i=0;i<10;i++)            //打印排序后的,字符口串(指针)
  287.         {
  288.                 if(i%5==0)
  289.                         printf("\n");
  290.         printf("%10s",w);         //这里用工a[i]即用指针,指针已经重新排序了,所以打印排序后的结果
  291.         }
  292.        
  293.         printf("\n\n");
  294.        
  295.         return 0;
  296.        
  297.        
  298. }


  299. char *px(char *c[],int n)
  300. {
  301.         int i,k,j=0;
  302.         char *temp,*o[10];
  303.         for (i=n-1;i>=0;i--)
  304.         {
  305.                 for (k=0;k<i;k++,j++)
  306.                 {
  307.                         if(strcmp(c[k],c[k+1])>0)    //指针所指字符串比较(排序)
  308.                         {
  309.                                 temp=c[k];           //指针地址交换
  310.                                 c[k]=c[k+1];
  311.                                 c[k+1]=temp;
  312.                                 o[j]=c[k+1];
  313.                                
  314.                         }
  315.                        
  316.                 }
  317.         }
  318.        
  319.         return *o;
  320. }
  321. #endif
复制代码

前二个是网上找的,后面的是我自己做的


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-3-23 09:58:55 | 显示全部楼层
haiouda 发表于 2015-3-23 01:04
前二个是网上找的,后面的是我自己做的

那两个挺好的啊,思路差不多,我自己用一个整形数组存放次序主要是因为自己对于字符数组和字符指针这两种方式并不是特别的清楚,只知道大概的区别,楼主自己有想法的话,挺好的,但是自己的想法最好实现了再去借鉴别人的想法,楼主加油学习啊,c语言也是博大精深的~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-4-1 21:28:03 | 显示全部楼层
{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 11:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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