黑马程序员技术交流社区

标题: 从键盘输入6个字符串仅仅包含英文字母和数字,小到大排列 [打印本页]

作者: ヅ光着脚丫dε尐    时间: 2014-7-31 17:10
标题: 从键盘输入6个字符串仅仅包含英文字母和数字,小到大排列
本帖最后由 ヅ光着脚丫dε尐 于 2014-8-6 20:25 编辑

没理解这个是排列,是按字符串长度还是首字符,要是长度的话还好说,要是首字符的话有数字有字母怎么排,没有思路。。
作者: fantacyleo    时间: 2014-7-31 20:11
我觉得是说按字符的ascii码大小排列
作者: -(_)-    时间: 2014-7-31 21:15
英文字母跟数字进行比较的话, 是用英文字母对应的ASCII码进行比较的, 你把字符串解析成一个个字符, 然后按大小进行比较排列就行了.
作者: 枫·殇    时间: 2014-8-1 16:50
-(_)- 发表于 2014-7-31 21:15
英文字母跟数字进行比较的话, 是用英文字母对应的ASCII码进行比较的, 你把字符串解析成一个个字符, 然后按 ...

就是ASCII码的对
作者: 陆习康    时间: 2014-8-2 15:39
字符和数字都会被翻译成数字的,应该是按照ASCII的数字大小排列的吧
作者: 小小菜鸟007    时间: 2014-8-6 11:34
1、第一,对6个串的比较排序
作者: 小小菜鸟007    时间: 2014-8-6 11:35
小小菜鸟007 发表于 2014-8-6 11:34
1、第一,对6个串的比较排序

首先你要知道数字的ASCII码要比字母在前    大写字母在小写字母前
作者: cjfire    时间: 2014-8-7 11:14
  1. #import <Foundation/Foundation.h>

  2. int main(int argc, const char * argv[])
  3. {
  4.     printf("请输入六个字符:\n");
  5.     char res[6];
  6.     scanf("%s",res);
  7.     //检测 仅仅包含英文字母和数字
  8.     for (int i = 0; i < 6; i++) {
  9.         if(!(((res[i] >= '0')&&(res[i] <= '9'))||((res[i] >= 'a')&&(res[i] <= 'z'))||((res[i] >= 'A')&&(res[i] <= 'Z'))))
  10.         {
  11.             printf("非法字符%c",res[i]);
  12.             return 0;
  13.         }
  14.     }
  15.     //置换临时变量
  16.     char temp;
  17.     //比较大小
  18.     for(int i = 0;i < 5;i++)
  19.     {
  20.         for(int j = i + 1;j <6;j++)
  21.         {
  22.             if (res[i] > res[j]) {
  23.                 temp = res[i];
  24.                 res[i] = res[j];
  25.                 res[j] = temp;
  26.             }
  27.         }
  28.     }
  29.     //输出打印
  30.     for(int i = 0;i < 6;i++)
  31.     {
  32.         printf("%c ",res[i]);
  33.     }
  34.    
  35.     return 0;
  36. }
复制代码

作者: 周易    时间: 2014-8-23 21:37
其实我也遇到同样的问题了
作者: SailY    时间: 2014-8-24 09:04
感觉题目说的有歧义,貌似考察指针数组应用
作者: ﹉随♥游✈者    时间: 2014-8-25 20:20
还是路过,,,,,,,,,,,,,,,
作者: songxing10000    时间: 2014-10-27 10:29

  1. /*
  2. 从键盘输入6个字符串(仅仅包含英文字母和数字),对这6个字符串从小到大排列并输出结果。
  3. */

  4. #import <Foundation/Foundation.h>
  5. int main(int argc, const char * argv[]) {
  6.     @autoreleasepool {
  7.    
  8.         char ch[6][50];
  9.         for (int i = 0; i<6; i++) {
  10.             printf("键入第%d个字符串:",i+1);
  11.             scanf(" %s",ch[i]);
  12.             
  13.         }
  14.         
  15.         for (int i = 0; i<6; i++) {
  16.             for (int j = 0; j<5; j++) {
  17.                 if (strcmp(ch[i], ch[j])<0) {
  18.                     
  19.                     char temp[50];
  20.                     strcpy(temp, ch[i]);
  21.                     strcpy(ch[i], ch[j]);
  22.                     strcpy(ch[j],temp);
  23.                 }
  24.             }
  25.         }
  26.         printf("由小大到排序完毕:");
  27.         for (int i = 0; i<6; i++) {
  28.             printf("%s ",ch[i]);
  29.         }
  30.         printf("\n");
  31.     }
  32.     return 0;
  33. }
复制代码



作者: wx_hg1q2t6v    时间: 2014-12-17 19:05
我也遇到这道题了
作者: 李欢宇    时间: 2014-12-22 13:38
songxing10000 发表于 2014-10-27 10:29

strcpy是什么啊
作者: 黑色淘金    时间: 2015-3-7 14:36
我也是遇到这个问题了,题目有歧义
作者: whymerain    时间: 2015-3-13 21:44
我理解的是连续输入六个字符串,比较他们的字符长度。如果这样的话,我觉得最难的地方是如何避免重复打印。代码最靠后的部分,if break 打断最近循环,避免重复打印。
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main(int argc, const char * argv[])
  4. {
  5.    
  6.    
  7.     char ch[6][500];
  8.     for (int i = 0; i<6; i++)
  9.     {
  10.         printf("键入第%d个字符串:",i+1);
  11.         scanf("%s",ch[i]);
  12.         
  13.     }
  14.    
  15.         //计算各个字符串长度
  16.     int  count[6];
  17.         for (int i = 0; i<6; i++)
  18.         
  19.         count[i] = strlen(ch[i]);
  20.        
  21.     // 定义一个数组x用来存放各个字符串出现次数
  22.     int x[6];
  23.     for(int i =0;i<6;i++) x[i]=count[i];
  24.    
  25.     // 定义temp用于冒泡排序标记排序趟数
  26.     int temp;
  27.    
  28.     // 冒泡排序  将count[0]~count[5]降序排序
  29.     for (int i = 0; i<5; i++)
  30.     {
  31.         for(int j = 0;j<5;j++)
  32.         {
  33.             if (x[j] < x[j+1])
  34.             { // 当前一个元素小于后一个元素时,交换它们的位置
  35.                 temp = x[j];
  36.                 x[j] = x[j+1];
  37.                 x[j+1] = temp;
  38.             }
  39.         }
  40.     }
  41.     int *p =x;
  42.     *(p-1)=x[0]-1; //x[0]前内存赋值,使她和x[0]不一样,方便下面使用x[0]和x[1]比较
  43.    
  44.     //for 嵌套循环对这A个字符串从小到大排列并输出结果
  45.         for( int i=0;i<6;i++)
  46.     { for(int j=0;j<6;j++)
  47.     {
  48.         if (x[i]==x[i-1]) break; //当字符大小有相同时,打断for循环,避免重复输出
  49.         else if (x[i]==count[j]) printf("%s %d\n",ch[j],x[i]);

  50.     }
  51.         
  52.     }
  53.    
  54.    
  55.     return 0;
  56. }
复制代码




作者: koala1122    时间: 2015-3-21 23:11
cjfire 发表于 2014-8-7 11:14

遇到了,我是按照这个思路写的。
作者: 葛先生    时间: 2015-3-27 23:09
肯定是字符串长度啊
作者: 葛先生    时间: 2015-3-28 10:15
whymerain 发表于 2015-3-13 21:44
我理解的是连续输入六个字符串,比较他们的字符长度。如果这样的话,我觉得最难的地方是如何避免重复打印。 ...

  

08.    char ch[6][500];

09.    for (int i = 0; i<6; i++)

10.    {

11.        printf("键入第%d个字符串:",i+1);

12.        scanf("%s",ch);

13.        

14.    }

15.   

16.        //计算各个字符串长度

17.    int  count[6];

18.        for (int i = 0; i<6; i++)

19.        

20.        count = strlen(ch);
这里是不是可以节俭下啊
作者: 葛先生    时间: 2015-3-28 11:01
#include <stdio.h>
int main()
{
  
  int a[100]={5,3,0,1,4,7,6,11};
  int m=a[0];
  int b=strlen(a);
  for(int i=1;i<b;i++)
  {
   if(a[i]<m)
   {
    m=a[i]
   }
   
  }

return 0;
}

9、 从键盘输入6个字符串(仅仅包含英文字母和数字),对这6个字符串从小到大排列并输出结果。(C语言)

#include <stdio.h>

int main()
{
char c[6][100];
int count[6];
  for(int i=0;i<6;i++)
  {
   printf("请输入第%d个字符串\n".i+1);
   scanf("%s",&a[i][100]);
   int count[i]=strlen(c[i])

  }
  
  int temp;   

  for(int i=0;i<5;i++)
  {
    for(int j=0;j<5;j++)
    {
      if(count[j]>count[j+1])
      {
        temp=count[j+1];
        count[j+1]=count[j];
        count[j]=temp
      }
      
    }

  }
  for(int i=0;i<6;i++)
  {
    if(count[i]==strlen(c[1]))
    {
     printf("%s"c[1])
     -1
    }
   
    if(count[i]==strlen(c[2]))
    {
     printf("%s"c[2])
     -1
    }

    if(count[i]==strlen(c[3]))
    {
     printf("%s"c[3])
     -1
    }

    if(count[i]==strlen(c[4]))
    {
     printf("%s"c[4])
     -1
    }


    if(count[i]==strlen(c[5]))
    {
     printf("%s"c[5])
     -1
    }  

    if(count[i]==strlen(c[6]))
    {
     printf("%s"c[6])
     -1
    }

  }



return 0;
}


作者: ~缘~    时间: 2015-5-27 14:56

厉害,兄弟!
作者: 陈刘科    时间: 2015-5-28 16:05
大小应该是比较ASCII码的大小吧
作者: wqp123000    时间: 2015-10-7 14:21
好难啊,表示不会




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2