串的基本操作二(串)
时间: 1ms 内存:64M
描述:
输入一定量的单词(#结束),按字母顺序排序后输出,若有重复则只保留一个。
输入:
输出:
示例输入:
hello
I
how
fine
free
if
free
final
full
all
aware
#
示例输出:
all
aware
final
fine
free
full
hello
how
I
if
提示:
参考答案(内存最优[752]):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct string
{
char data[200][20];
int len;
};
int flag[200]={0};
struct string strassign() /*建立顺序串*/
{
struct string s;
int i;
for(i=0;;i++)
{
scanf("%s",s.data[i]);
if(s.data[i][0]>='A'&&s.data[i][0]<='Z')
{
s.data[i][0]+=32;
flag[i]=1;
}
if(s.data[i][0]=='#')
break;
}
s.len=i;
return s;
}
int main()
{
int m,i,j=0,k=0,s;
char n,t[20];
struct string p1,p2,p3,p4;
p1=strassign();
for(i=0;i<p1.len;i++)
{
for(j=i+1;j<p1.len;j++)
{
if(strcmp(p1.data[i],p1.data[j])==0)
{
for(k=j;k<p1.len-1;k++)
{
strcpy(p1.data[k],p1.data[k+1]);
flag[k]=flag[k+1];
}
p1.len-=1;
}
}
}
for(i=0; i<p1.len;i++)
for(j=i+1;j<p1.len;j++)
if(strcmp(p1.data[i],p1.data[j])>0)
{
strcpy(t,p1.data[i]);
strcpy(p1.data[i],p1.data[j]);
strcpy(p1.data[j],t);
s=flag[i];
flag[i]=flag[j];
flag[j]=s;
}
for(i=0;i<p1.len;i++)
{
if(flag[i]==1)
{
printf("%c",p1.data[i][0]-32);
printf("%s\n",p1.data[i]+1);
}
else
printf("%s\n",p1.data[i]);
}
return 0;
}
参考答案(时间最优[0]):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int dzx(char a)
{
if(a>='A'&&a<='Z')
a=a+32;
return a;
}
int strbj(char a[],char b[])
{ int mlen,i;
if(strlen(a)>strlen(b)) mlen=strlen(b);
else mlen=strlen(a);
for(i=0;i<mlen;i++)
{
if(dzx(a[i])!=dzx(b[i]))break;
}
if(i!=mlen)
{
if(dzx(a[i])>dzx(b[i])) return 1;
else if(dzx(a[i])<dzx(b[i])) return -1;
}
else
{ if(strlen(a)==strlen(b)) return 0;
else if(mlen==strlen(a)) return -1;
else return 1;
}
return 0;
}
int main()
{
char **a,*p,i=0,j,k;
p=(char*)malloc(20*10*sizeof(char));
a=(char**)malloc(20*sizeof(char *));
char b[10];
char *temp=b;
for(k=0; k<20; k++)
a[k]=p+k*10;
while(scanf("%s",a[i])!=EOF)
{
if(a[i][0]=='#') break;
i=i+1;
}
for(k=0;k<i-1;k=k+1)
for(j=0;j<i-1;j=j+1)
{
if(strbj(a[j],a[j+1])>0) {strcpy(temp,a[j]);strcpy(a[j],a[j+1]);strcpy(a[j+1],temp);}
} printf("%s\n",a[0]);
for (j=1; j<i-1; j=j+1)
{
if(strbj(a[j],a[j-1])!=0)
printf("%s\n",a[j]);
}
printf("%s\n",a[i-1]);
free(p);
free(a);
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。