c语言中从键盘输入N个字符串,将字符串按从小到大的顺序排列并输出

Python013

c语言中从键盘输入N个字符串,将字符串按从小到大的顺序排列并输出,第1张

1

输入字符串

2

对字符串进行排序;

3

输出。

排序中需要注意:

1

用strcmp比较字符串;

2

用strcpy执行字符串的赋值。

代码如下:

#define N 50

int main()

{

char s[N][100]

int i,j

for(i = 0i <Ni ++)

scanf("%s",s[i])

for(i = 0i <N-1i ++)

{

for(j = i+1j <Nj ++)

{

if(strcmp(s[i],s[j])>0)

{

char t[100]

strcpy(t,s[i])

strcpy(s[i],s[j])

strcpy(s[j],t)

}

}

}

for(i = 0i <Ni ++)

puts(s[i])

}

根据你的题意。

第一行输入是26个字母的指定顺序。

第二行输入是内容字符串。

将内容字符串中的字母按照指定顺序替换成对应26个字母原顺序的字母。

规则:第一行输入必须是26个小写母,且不能重复。

替换后的字符中字母大小写参照原字符串。

下面是代码:

#include<stdio.h>

#include<string.h>

#define MAXLEN 100//第二行输入字符串的最大长度

char *inPutNewOrder()//输入26个字母的新顺序,必须为小写字母,不能有重复。输入成功返回字符串,失败返回NULL

char getNewLetter(char cIn,char newOrder[27])//获取字母对应newOrder的原始字母,成功返回字母,失败返回0

int main()

{

  int i

  char *newOrder//输入新字母顺序

  char inputStr[MAXLEN],cIn

  while(1)

  {

      newOrder=NULL

      while(!newOrder)

          newOrder=inPutNewOrder()

      memset(inputStr,0,sizeof(char)*MAXLEN)

      for(i=0i<MAXLENi++)

      {

          cIn=getchar()

          if(cIn==10)//回车结束输入

              break

          if((cIn>=65 &&cIn<=90)||(cIn>=97 &&cIn<=122))//如输入的是字母,对应新字母顺序,找到原字母

              inputStr[i]=getNewLetter(cIn,newOrder)

          else

              inputStr[i]=cIn

      }

      if(i==MAXLEN)

          while ((cIn = getchar()) != EOF &&cIn != '\n')

      printf("%s\n\n",inputStr)

  }

  return 0

}

char *inPutNewOrder()//输入26个字母的新顺序,必须为小写字母,不能有重复

{

  int i=0,j,flag=1

  static char newOrder[27]

  char c=0

  memset(newOrder,0,sizeof(char)*27)

  while(1)

  {

      if(newOrder[25]!=0)

          break

      c=getchar()

if(c<97 || c>122)//输入小写字母以外字符,标识错误

          flag=0

      for(j=0flag &&j<ij++)

if(newOrder[j]==c)//输入重复,标识错误

              flag=0

      if(!flag)//错误,终止输入

      {

          printf("输入格式错误!必须为26个小写字母,且不能有重复,请重新输入。\n")

          while ((c = getchar()) != EOF &&c != '\n')

          return NULL

      }

      newOrder[i]=c

      i++

  }

  while ((c = getchar()) != EOF &&c != '\n')

  return newOrder

}

char getNewLetter(char cIn,char newOrder[27])//获取字母对应newOrder的原始字母,成功返回字母,失败返回0

{

  static char letters[]="abcdefghijklmnopqrstuvwxyz"

  char c

  int i,flag//flag=1大写字母,flag=0是小写字母

  if(cIn>=65 &&cIn<=90)//输入的是大写字母

      c=cIn+32,flag=1

  if(cIn>=97 &&cIn<=122)//输入的是小写字母

      c=cIn,flag=0

  for(i=0i<26i++)

      if(newOrder[i]==c)//在新序列中匹配大写字母或小写字母

      {

          if(flag)

              return letters[i]-32

          else

              return letters[i]

      }

  return 0

}