串的基本操作二(串)

串的基本操作二(串)

时间: 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;

}




题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注