鱼C论坛

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

指针练习

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

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

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

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

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

最佳答案

查看完整内容

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

使用道具 举报

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

void main()
{
        # 定义并输入十个字符串存入数组str[10][30]
        int *sequence;
        sequence = str_sort(str[10][30])
        for(int i = 0;i <10;i++)
                printf("%s",str[seq[i]])
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2015-3-22 19:53:21 | 显示全部楼层
语文不好,给几个例子!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-22 21:18:19 | 显示全部楼层
:call:看着鱼兄的鱼币,想要。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

void sort(char s[][20])
{
        int i,j;
        char *p,temp[20];
        p=temp;
        for (i=0;i<9;i++)
                for (j=0;j<9-i;j++)
                        if (strcmp(s[j],s[j+1])>0)
                        {
                                strcpy(p,s[j]);
                                strcpy(s[j],s[+j+1]);
                                strcpy(s[j+1],p);
                        }
}



#endif







#if(1)

#include <stdio.h>
#include <string.h>
int main()
{
        void sort(char (*p)[6]);
        int i;
        char str[10][6];
        char (*p)[6];                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
        printf("input 10 strings:\n");
        for (i=0;i<10;i++)
                scanf("%s",str[i]);
        p=str;
        sort(p);
        printf("Now,the sequence is:\n");
        for (i=0;i<10;i++)
                printf("%s\n",str[i]);
        return 0;
}

void sort(char (*s)[6])
{
        int i,j;
        char temp[6],*t=temp;
        for (i=0;i<9;i++)
                for (j=0;j<9-i;j++)
                        if (strcmp(s[j],s[j+1])>0)
                        {
                                strcpy(t,s[j]);
                                strcpy(s[j],s[+j+1]);
                                strcpy(s[j+1],t);
                        }
}



#endif











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

int main()
{
        void px(char *c[],int n);
        char b[10][20]={0},temp;
        int i,j,k,n=10;
        
        for (i=0,k=0; i<10; i++,k++)      //字符串输入
        {
                a[k]=b[i];
                for(j=0;j<20;j++)
                {
                        temp=getchar();
                        if(temp=='\n')
                        {
                                b[i][j]='\0';
                                break;
                        }
                        b[i][j]=temp;
                        
                }
        }
        
        for (i=0;i<10;i++)            //打印输入的字符串
        {
                if(i%5==0)
                        printf("\n");
                printf("%10s",b[i]);         //这里b[i]换成a[i]输出是一样的,因为这时a[i]指向b[i]
        }
        printf("\n\n");
        
        
        px(a,10);        // 调用实参把数组调入                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
        
        
        for(i=0;i<10;i++)                         //打印排序后的,字符口串                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
        {
                if(i%5==0)
                        printf("\n");
                printf("%10s",b[i]);       // 这里用的是b[i]即打印数组,因为数组里字符位置没变所以原样输出
        } 
        
        
        printf("\n\n");
        
        for (i=0;i<10;i++)            //打印排序后的,字符口串(指针)
        {
                if(i%5==0)
                        printf("\n");
                printf("%10s",a[i]);         //这里用工a[i]即用指针,指针已经重新排序了,所以打印排序后的结果
        }
        
        printf("\n\n");
        
        return 0;
        
        
}


void px(char *c[],int n)
{ 
        int i,k;
        char *temp;
        for (i=n-1;i>=0;i--)
        {
                for (k=0;k<i;k++)
                {
                        if(strcmp(c[k],c[k+1])>0)    //指针所指字符串比较(排序)
                        {
                                temp=c[k];           //指针地址交换
                                c[k]=c[k+1];
                                c[k+1]=temp;
                                
                                
                        }
                        
                }
        }
        
        
}
#endif













#if(0)

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

int main()
{
        void px(char d[][20],int n);
        char *a[10],temp;
        int i,j,k,n=10;
        
        for (i=0,k=0; i<10; i++,k++)      //字符串输入
        {
                a[k]=b[i];
                for(j=0;j<20;j++)
                {
                        temp=getchar();
                        if(temp=='\n')
                        {
                                b[i][j]='\0';
                                break;
                        }
                        b[i][j]=temp;
                        
                }
        }
        
        for (i=0;i<10;i++)            //打印输入的字符串
        {
                if(i%5==0)
                        printf("\n");
                printf("%10s",b[i]);         //这里b[i]换成a[i]输出是一样的,因为这时a[i]指向b[i]
        }
        printf("\n\n");
        
        px(b,10);        // 调用实参把数组调入                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
        
        for(i=0;i<10;i++)                         //打印排序后的,字符口串(数组)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
        {
                if(i%5==0)
                        printf("\n");
                printf("%10s",b[i]);
        } 
        
        printf("\n\n");
        
        for (i=0;i<10;i++)            //打印排序后的,字符口串(指针)
        {
                if(i%5==0)
                        printf("\n");
                printf("%10s",a[i]);
        }
        
        printf("\n\n");
        
        return 0;
        
        
}

void px(char d[][20],int n)
{ 
        int i,k;
        char temp[20];
        for (i=n-1;i>=0;i--)
        {
                for (k=0;k<i;k++)
                {
                        if(strcmp(d[k],d[k+1])>0)    //字符串比较,并排序
                        {
                                strcpy(temp,d[k]);       //字符串复制
                                strcpy(d[k],d[k+1]);
                                strcpy(d[k+1],temp);
                        }
                        
                }
        }
        
        
}
#endif









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


int main()
{
        char *px(char *c[],int n),*w;
        char *a[10],b[10][20]={0},temp;
        int i,j,k,n=10;
        
        for (i=0,k=0; i<10; i++,k++)      //字符串输入
        {
                a[k]=b[i];
                for(j=0;j<20;j++)
                {
                        temp=getchar();
                        if(temp=='\n')
                        {
                                b[i][j]='\0';
                                break;
                        }
                        b[i][j]=temp;
                        
                }
        }
        
        for (i=0;i<10;i++)            //打印输入的字符串
        {
                if(i%5==0)
                        printf("\n");
                printf("%10s",b[i]);         //这里b[i]换成a[i]输出是一样的,因为这时a[i]指向b[i]
        }
        printf("\n\n");
        
        
        
        
        w=px(a,10);        // 调用实参把数组调入                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
        
        
        
#if(0)
        for(i=0;i<10;i++)                         //打印排序后的,字符口串                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
        {
                if(i%5==0)
                        printf("\n");
                printf("%10s",b[i]);       // 这里用的是b[i]即打印数组,因为数组里字符位置没变所以原样输出
        } 
#endif
        
        printf("\n\n");
        
        
        
        
        for (i=0;i<10;i++)            //打印排序后的,字符口串(指针)
        {
                if(i%5==0)
                        printf("\n");
        printf("%10s",w);         //这里用工a[i]即用指针,指针已经重新排序了,所以打印排序后的结果
        }
        
        printf("\n\n");
        
        return 0;
        
        
}


char *px(char *c[],int n)
{ 
        int i,k,j=0;
        char *temp,*o[10];
        for (i=n-1;i>=0;i--)
        {
                for (k=0;k<i;k++,j++)
                {
                        if(strcmp(c[k],c[k+1])>0)    //指针所指字符串比较(排序)
                        {
                                temp=c[k];           //指针地址交换
                                c[k]=c[k+1];
                                c[k+1]=temp;
                                o[j]=c[k+1];
                                
                        }
                        
                }
        }
        
        return *o;
}
#endif
前二个是网上找的,后面的是我自己做的


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

发表于 2015-4-1 21:28:03 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 21:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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