| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 408 人关注过本帖
标题:大家帮忙看看,这个代码的问题
只看楼主 加入收藏
枫叶无痕
Rank: 2
等 级:论坛游民
帖 子:80
专家分:30
注 册:2011-2-10
结帖率:73.91%
收藏
已结贴  问题点数:30 回复次数:8 
大家帮忙看看,这个代码的问题
#include<stdio.h>
#include<string.h>
main()
{
    char str[31][10];
    int i,j,t[100],k,f;
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++)
        {
            gets(str[i]);
            t[i]=strlen(str[i]);
        }
        for(k=0;k<n;k++)
         for(f=0;f<n-k-1;f++)
         {
             if(t[f]>t[f+1])
             {
                 j=str[f][10];
                 str[f][10]=str[f+1][10];
                 str[f+1][10]=j;
             }
         }
         for(i=0;i<n;i++)
         {
             puts(str[i]);
         }
    }
}
帮忙看看这个代码,比较字符串的长度并从小到大输出
搜索更多相关主题的帖子: include 
2011-03-28 13:13
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:15 
做过的练习, 请楼主参考一下。
程序代码:
#include <stdio.h>
#define N 5                  //预定义5条字符串

struct string {
        char str[15];       //每个字符串长度不超过15
};

int main (void) {
        struct string array[N];    //结构数组array,记录5
        char tmp[15];               //临时数组
        int cmpstr (char s1[],char s2[]);  //字符串比较函数
        void cpstr (char dest[],char source[]);//字符串传送
        int i=0,j,n;

        printf ("Enter 5 character strings:\n");
//输入5个字符串
        for(i=0;i<N;i++) {
                scanf ("%s",array[i].str);
        }

        printf ("Before sorted ...\n");

        for (i=0;i<N;i++) {
                printf ("%s\n",array[i].str);
        }

        printf ("\n\n");
//排序
        for(i=0;i<N-1;i++) {
                for(j=i+1;j<N;j++) {
                        n=cmpstr(array[i].str,array[j].str);
                        if(n==1) {
                                cpstr(tmp,array[i].str);
                                cpstr(array[i].str,array[j].str);
                                cpstr(array[j].str,tmp);
                        }
                }
        }

        printf ("After sorted...\n");
//打印结果
        for(i=0;i<N;i++) {
                printf ("%s\n",array[i].str);
        }

        printf ("\n");

        return 0;
}
//compare string1 and string2
int cmpstr (char s1[],char s2[]) {
        int i=0;
        while(s1[i]!='\0'&&s2[i]!='\0') {
                if(s1[i]>s2[i]) {
                        return 1;
                }
                if(s1[i]<s2[i]) {
                        return -1;
                }
                i++;
        }
        if(s1[i]=='\0'&&s2[i]=='\0') {
                return 0;
        }
}
//copy string from source to destination
void cpstr (char dest[],char source[]) {
        int i;
        for(i=0;source[i]!='\0';i++) {
                dest[i]=source[i];
        }
        dest[i]='\0';
}


[ 本帖最后由 ansic 于 2011-3-28 13:25 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-28 13:24
张敏樱木花道
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:137
注 册:2011-3-26
收藏
得分:0 
首先你处理问题的思路是对的。
错在哪里了:1,j是int型的,你j=str[f][10];是不对的,类型不搭配。
                    2,你试图用数字交换的方法来进行字符串的交换,这是不对的。字符串是不能整体赋值的。
                           你只能借助字符串函数strcpy来进行。

我也是一个新手,我刚开始也犯了和你一样的错误。希望共勉。

2011-03-28 13:57
枫叶无痕
Rank: 2
等 级:论坛游民
帖 子:80
专家分:30
注 册:2011-2-10
收藏
得分:0 
回复 2楼 ansic
好像不对哎,排序错了
2011-03-28 15:53
枫叶无痕
Rank: 2
等 级:论坛游民
帖 子:80
专家分:30
注 册:2011-2-10
收藏
得分:0 
回复 3楼 张敏樱木花道
#include<stdio.h>
#include<string.h>
main()
{
    char str[31][100],j;
    int i,t[100],k,f;
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++)
        {
            gets(str[i]);
        }
        for(i=0;i<n;i++)
        {
            t[i]=strlen(str[i]);
        }
        for(k=0;k<n;k++)
         for(f=0;f<n-k-1;f++)
         {
             if(t[f]>t[f+1])
             {
                 strcpy(j,str[f]);
                 strcpy(str[f],str[f+1]);
                 strcpy(str[f+1],j);
             }
         }
         for(i=0;i<n;i++)
         {
             puts(str[i]);
         }
    }
}
这样对吗?
2011-03-28 15:56
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:0 
是根据输入字符串长度排序吗?

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-28 15:59
枫叶无痕
Rank: 2
等 级:论坛游民
帖 子:80
专家分:30
注 册:2011-2-10
收藏
得分:0 
回复 6楼 ansic
是的
2011-03-28 16:21
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:15 
我也是菜鸟, 不知是不是这样的
程序代码:

root@~ #cat len.c
#include <stdio.h>

//定义一个结构,来存储输入的字符串
struct strarray {
        char str[20];
};
int main (void) {
struct strarray chstr[5];  //假设存储5条记录

        int i=0,j,t,a[5]; //a[5]用于保存每条记录的长度
        int strLen (char s[]);

        do {
                scanf ("%s",chstr[i].str); //输入字符串
                a[i]=strLen(chstr[i].str); //保存字串长度
                i++;
        }while(i<5);
//先将含有字串长度的数组升序排列
        for(i=0;i<4;i++) {
                for(j=i+1;j<5;j++) {
                        if(a[i]>a[j]) {
                                t=a[i];a[i]=a[j];a[j]=t;
                        }
                }
        }
//然后输出
        printf ("\nOutput:\n");
        for(i=0;i<5;i++) {
                for(j=0;j<5;j++) {
                        if(a[i]==strLen(chstr[j].str)) {
                                printf ("%s\n",chstr[j].str);
                        }
                }
        }

        return 0;

}

int strLen (char s[]) {
        int i=0;
        while(s[i]!='\0') {
                i++;
        }
        return i;
}
root@~ #


[color]测试[/color]
root@~ #./len
asdfsdf
wer
23
3
23423445435

Output:
3
23
wer
asdfsdf
23423445435
root@~ #

[ 本帖最后由 ansic 于 2011-3-28 16:42 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-28 16:39
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
LZ要加油啊

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-03-29 10:55
快速回复:大家帮忙看看,这个代码的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021636 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved