A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ヅ光着脚丫dε尐 于 2014-8-6 20:25 编辑

没理解这个是排列,是按字符串长度还是首字符,要是长度的话还好说,要是首字符的话有数字有字母怎么排,没有思路。。

22 个回复

倒序浏览
我觉得是说按字符的ascii码大小排列
回复 使用道具 举报
英文字母跟数字进行比较的话, 是用英文字母对应的ASCII码进行比较的, 你把字符串解析成一个个字符, 然后按大小进行比较排列就行了.
回复 使用道具 举报
-(_)- 发表于 2014-7-31 21:15
英文字母跟数字进行比较的话, 是用英文字母对应的ASCII码进行比较的, 你把字符串解析成一个个字符, 然后按 ...

就是ASCII码的对
回复 使用道具 举报
字符和数字都会被翻译成数字的,应该是按照ASCII的数字大小排列的吧
回复 使用道具 举报
1、第一,对6个串的比较排序
回复 使用道具 举报
小小菜鸟007 发表于 2014-8-6 11:34
1、第一,对6个串的比较排序

首先你要知道数字的ASCII码要比字母在前    大写字母在小写字母前
回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
★彬★卍囧神 + 1 很给力!

查看全部评分

回复 使用道具 举报
周易 中级黑马 2014-8-23 21:37:22
9#
其实我也遇到同样的问题了
回复 使用道具 举报
SailY 中级黑马 2014-8-24 09:04:53
10#
感觉题目说的有歧义,貌似考察指针数组应用
回复 使用道具 举报
还是路过,,,,,,,,,,,,,,,
回复 使用道具 举报

  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. }
复制代码


回复 使用道具 举报 1 0
我也遇到这道题了
回复 使用道具 举报
回复 使用道具 举报
我也是遇到这个问题了,题目有歧义
回复 使用道具 举报
我理解的是连续输入六个字符串,比较他们的字符长度。如果这样的话,我觉得最难的地方是如何避免重复打印。代码最靠后的部分,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. }
复制代码



回复 使用道具 举报

遇到了,我是按照这个思路写的。
回复 使用道具 举报
肯定是字符串长度啊
回复 使用道具 举报
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);
这里是不是可以节俭下啊
回复 使用道具 举报
#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;
}

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马