指针练习
本帖最后由 haiouda 于 2015-3-22 11:19 编辑/****************************************************************************************************************************************
在主函数中输入10个等长的字符串。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。
上题也可改为:在主函数中输入10个字符串(不限制是否等长)。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。
*****************************************************************************************************************************************/
上面这题是课后习题;
完成上面这题目,我是用了全局变量,才解决的;
请问,在不用全局变量的情况下,如何能做出上面的题目来,谢谢
不知道楼主的10个等长字符串是怎么存放的,不过既然等长,而且数量又这么大,我就姑且猜测楼主的字符串是放在一个二元的字符数组里的吧
c语言凭记得的和网上查的东西写的,如果有语法错误,就看看思路就好了~~
那么函数如下
int *str_sort(str)
{
int seq#用于存放十个字符串的次序
int i,j,temp
for(i = 0;i < 10; i++)seq = i;#初始化字符串顺序
for(i = 9, j = 0;i > 0;i-- )#冒泡排序,seq数组存放字符串顺序
for(j = 0;j < i;j++)
if(strcmp(str,str) < 0)
{
temp = seq
seq = seq
seq = temp
}
return seq
}
void main()
{
# 定义并输入十个字符串存入数组str
int *sequence;
sequence = str_sort(str)
for(int i = 0;i <10;i++)
printf("%s",str])
}
你说的到底什么意思?
输在一个数组?
还是分开的数组?
排序怎么排?是星号的个数?从小到大?
说话能说清初么 语文不好,给几个例子!{:7_144:} :call:看着鱼兄的鱼币,想要。 lightninng 发表于 2015-3-22 21:39
不知道楼主的10个等长字符串是怎么存放的,不过既然等长,而且数量又这么大,我就姑且猜测楼主的字符串是放 ...
/**********************************************************************************************
在主函数中输入10个等长的字符串。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。
**********************************************************************************************/
#if(0)
#include <stdio.h>
#include <string.h>
int main()
{
void sort(char s[]);
int i;
char str;
printf("input 10 strings:\n");
for (i=0;i<10;i++)
scanf("%s",str);
sort(str);
printf("Now,the sequence is:\n");
for (i=0;i<10;i++)
printf("%s\n",str);
return 0;
}
void sort(char s[])
{
int i,j;
char *p,temp;
p=temp;
for (i=0;i<9;i++)
for (j=0;j<9-i;j++)
if (strcmp(s,s)>0)
{
strcpy(p,s);
strcpy(s,s[+j+1]);
strcpy(s,p);
}
}
#endif
#if(1)
#include <stdio.h>
#include <string.h>
int main()
{
void sort(char (*p));
int i;
char str;
char (*p);
printf("input 10 strings:\n");
for (i=0;i<10;i++)
scanf("%s",str);
p=str;
sort(p);
printf("Now,the sequence is:\n");
for (i=0;i<10;i++)
printf("%s\n",str);
return 0;
}
void sort(char (*s))
{
int i,j;
char temp,*t=temp;
for (i=0;i<9;i++)
for (j=0;j<9-i;j++)
if (strcmp(s,s)>0)
{
strcpy(t,s);
strcpy(s,s[+j+1]);
strcpy(s,t);
}
}
#endif
#if(0)
#include <stdio.h>
#include <string.h>
char *a; //全局变量,目的是在调用后返回时,指针的指向也跟着变化
int main()
{
void px(char *c[],int n);
char b={0},temp;
int i,j,k,n=10;
for (i=0,k=0; i<10; i++,k++) //字符串输入
{
a=b;
for(j=0;j<20;j++)
{
temp=getchar();
if(temp=='\n')
{
b='\0';
break;
}
b=temp;
}
}
for (i=0;i<10;i++) //打印输入的字符串
{
if(i%5==0)
printf("\n");
printf("%10s",b); //这里b换成a输出是一样的,因为这时a指向b
}
printf("\n\n");
px(a,10); // 调用实参把数组调入
for(i=0;i<10;i++) //打印排序后的,字符口串
{
if(i%5==0)
printf("\n");
printf("%10s",b); // 这里用的是b即打印数组,因为数组里字符位置没变所以原样输出
}
printf("\n\n");
for (i=0;i<10;i++) //打印排序后的,字符口串(指针)
{
if(i%5==0)
printf("\n");
printf("%10s",a); //这里用工a即用指针,指针已经重新排序了,所以打印排序后的结果
}
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,c)>0) //指针所指字符串比较(排序)
{
temp=c; //指针地址交换
c=c;
c=temp;
}
}
}
}
#endif
#if(0)
#include <stdio.h>
#include <string.h>
char b={0};// 全局变量数组,目的在调用函数后,数组本体已经排过序了
int main()
{
void px(char d[],int n);
char *a,temp;
int i,j,k,n=10;
for (i=0,k=0; i<10; i++,k++) //字符串输入
{
a=b;
for(j=0;j<20;j++)
{
temp=getchar();
if(temp=='\n')
{
b='\0';
break;
}
b=temp;
}
}
for (i=0;i<10;i++) //打印输入的字符串
{
if(i%5==0)
printf("\n");
printf("%10s",b); //这里b换成a输出是一样的,因为这时a指向b
}
printf("\n\n");
px(b,10); // 调用实参把数组调入
for(i=0;i<10;i++) //打印排序后的,字符口串(数组)
{
if(i%5==0)
printf("\n");
printf("%10s",b);
}
printf("\n\n");
for (i=0;i<10;i++) //打印排序后的,字符口串(指针)
{
if(i%5==0)
printf("\n");
printf("%10s",a);
}
printf("\n\n");
return 0;
}
void px(char d[],int n)
{
int i,k;
char temp;
for (i=n-1;i>=0;i--)
{
for (k=0;k<i;k++)
{
if(strcmp(d,d)>0) //字符串比较,并排序
{
strcpy(temp,d); //字符串复制
strcpy(d,d);
strcpy(d,temp);
}
}
}
}
#endif
#if(0)
#include <stdio.h>
#include <string.h>
int main()
{
char *px(char *c[],int n),*w;
char *a,b={0},temp;
int i,j,k,n=10;
for (i=0,k=0; i<10; i++,k++) //字符串输入
{
a=b;
for(j=0;j<20;j++)
{
temp=getchar();
if(temp=='\n')
{
b='\0';
break;
}
b=temp;
}
}
for (i=0;i<10;i++) //打印输入的字符串
{
if(i%5==0)
printf("\n");
printf("%10s",b); //这里b换成a输出是一样的,因为这时a指向b
}
printf("\n\n");
w=px(a,10); // 调用实参把数组调入
#if(0)
for(i=0;i<10;i++) //打印排序后的,字符口串
{
if(i%5==0)
printf("\n");
printf("%10s",b); // 这里用的是b即打印数组,因为数组里字符位置没变所以原样输出
}
#endif
printf("\n\n");
for (i=0;i<10;i++) //打印排序后的,字符口串(指针)
{
if(i%5==0)
printf("\n");
printf("%10s",w); //这里用工a即用指针,指针已经重新排序了,所以打印排序后的结果
}
printf("\n\n");
return 0;
}
char *px(char *c[],int n)
{
int i,k,j=0;
char *temp,*o;
for (i=n-1;i>=0;i--)
{
for (k=0;k<i;k++,j++)
{
if(strcmp(c,c)>0) //指针所指字符串比较(排序)
{
temp=c; //指针地址交换
c=c;
c=temp;
o=c;
}
}
}
return *o;
}
#endif
前二个是网上找的,后面的是我自己做的
haiouda 发表于 2015-3-23 01:04
前二个是网上找的,后面的是我自己做的
那两个挺好的啊,思路差不多,我自己用一个整形数组存放次序主要是因为自己对于字符数组和字符指针这两种方式并不是特别的清楚,只知道大概的区别,楼主自己有想法的话,挺好的,但是自己的想法最好实现了再去借鉴别人的想法,楼主加油学习啊,c语言也是博大精深的~~ {:1_1:}
页:
[1]