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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 桑托尔 中级黑马   /  2014-4-23 09:44  /  1167 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 桑托尔 于 2014-4-23 13:45 编辑

之前基础测试里面 出现了这样一道题,让随机输入6个字符串,要求是这6个字符串从短到长排列出来。
我的思路是这样的。把6个字符串分别录入之后,先把第一个字符串定义为最短,然后逐条与之后的进行比较,如果之后发现有比第一条更短的,就让这两条进行替换。这样第一条就是最短的了,
然后把第二条字符串定义为第二短,再分别逐条与之后的比较...
具体可以参看下面编码。
问题是 不知道为什么 替换两值,strcpy的那段总是报错,
如果把替换的那段代码注释变为空语句,错误就没了。
明明就是那个用法啊...
不知问题所在,求帮助
谢谢!

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.         char str[6][100];
  6.         for( int n = 0 ; n < 6 ; n++ )
  7.         {
  8.                 printf("请输入第%d个字符串\n", n+1 );
  9.                 gets(str[n]);        
  10.         };
  11.         
  12.         for( int i = 0 ; i < 6 ; i++)
  13.         {
  14.                 for( int j = i + 1 ; j < 6 ; j++)
  15.                 {
  16.                         if (strlen(str[i]) > strlen(str[j]))
  17.                         {
  18.                                 //左右两值互换
  19.                                 int temp[100];
  20.                                 strcpy(temp,str[i]);
  21.                                 strcpy(str[i],str[j]);
  22.                                 strcpy(str[j],str[i]);
  23.                                 
  24.                         };
  25.                 };        
  26.         
  27.         };

  28.         for (int m = 0 ; m < 6 ; m++)
  29.                 printf("%s\n",str[i]);

  30.         return 0 ;
  31. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

正序浏览
楼主犯了3处错误,我直接上代码你自己看我写的注释吧
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     char str[6][111];
  6.     for( int n = 0 ; n < 6 ; n++ )
  7.     {
  8.         printf("请输入第%d个字符串\n", n+1 );
  9.         gets(str[n]);
  10.     };
  11.    
  12.     for( int i = 0 ; i < 6 ; i++)
  13.     {
  14.         for( int j = i + 1 ; j < 6 ; j++)
  15.         {
  16.             if (strlen(str[i]) > strlen(str[j]))
  17.             {
  18.                 //左右两值互换,此处2处修改,1。是修改temp为字符数组,2。是值互换方法你搞错了
  19.                 char temp[111];
  20.                 strcpy(temp, str[i]);
  21.                 strcpy(str[i], str[j]);
  22.                 strcpy(str[j], temp);
  23.                
  24.             };
  25.         };
  26.         
  27.     };
  28.     // 3.此处错误是str【i】
  29.     for (int m = 0 ; m < 6 ; m++)
  30.         printf("%s\n",str[m]);
  31.    
  32.     return 0 ;
  33. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 agelessman 于 2014-4-23 10:39 编辑

for( int i = 0 ; i < 6 ; i++)
        {
                for( int j = i + 1 ; j < 6 ; j++)
                {
                        if (strlen(str) > strlen(str[j]))
                        {
                                //左右两值互换
                                int temp[100]; 这个是最好改成char temp【100】
                                strcpy(temp,str);
                                strcpy(str,str[j]);
                                strcpy(str[j],str);
                                
                        };
                };        
        
        };

        for (int m = 0 ; m < 6 ; m++)
                printf("%s\n",str);这个吧后面的str【i】改成str【m】

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

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