| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3229 人关注过本帖
标题:从键盘上输入一串字符串,将其中的单词(单词之间以空格作为分隔符)按长度 ...
只看楼主 加入收藏
miniq
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-11-23
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:4 
从键盘上输入一串字符串,将其中的单词(单词之间以空格作为分隔符)按长度依次输出。假设每个单词的长度不超过100,单词数目不超过100。
求帮助
搜索更多相关主题的帖子: 字符串 单词 键盘 
2016-12-08 14:45
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:1 
struct
{
   char str[100];
   int length;
};
用结构体保存数据,再用sqort()排序
2016-12-08 15:03
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:4 
做了个,感觉有点复杂~

程序代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

struct Length
{
    int num;
    int len;
}Length[100];
struct Length Temp;
char *fun(char ss[][100],char *p,int n,int size)
{
    memccpy(ss[n],p,' ',size);
    while (*p!=' ')
         p++;

    if (*p=='\0')
        return p;

    while (*p++==' ');

    p--;

    return p;
}
void Mystrlen(char ss[][100],int n)
{
    Length[n].num=n;
    Length[n].len=strlen(ss[n])-1;
}
void change(int n)
{
    int i,j;

    for (i=0;i<n;i++)
        for (j=0;j<n-1-i;j++)
            if (Length[j].len<Length[j+1].len)
            {
                Temp=Length[j];
                Length[j]=Length[j+1];
                Length[j+1]=Temp;
            }
}
void print(char ss[][100],int n)
{
    int i=0;

    for (i=0;i<n;i++)
        printf("%s\n",ss[Length[i].num]);
    
}
int main()
{
    char str[10000];
    char ss[100][100];
    char *pl=str;
    int i=0;
    int count=0;

    memset(ss,0,sizeof(ss));

    gets(str);

    while (*pl)
        pl=fun(ss,pl,i++,sizeof(str));

    while (count<i)
        Mystrlen(ss,count++);

    if (ss[i-1][strlen(ss[i-1])-1]!=' ')
        Length[i-1].len++;

    change(i);

    print(ss,i);

    return 0;
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-08 16:45
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:3 
回复 楼主 miniq
#include<stdio.h>
char ch[100][100]={""};
int main()
{
    char sentence[10000];int i;int flag=1;int head=0;int idx,x=0,y;
    printf("输入字符串:");
    gets(sentence);
    for(i=0;i<10000;i++)
    {
        if(sentence[i]!=' '&&flag==1){flag=0;head=i;}
        if((sentence[i]==' '||sentence[i]=='\0')&&flag==0)
        {
            y=0;
            for(idx=0;idx<i-head;idx++)
            {
                ch[x][y]=sentence[head+idx];
                y++;
            }
            ch[x][y]='\0';
            x++;
            flag=1;
        }
        if(sentence[i]=='\0')break;
    }
    for(i=0;i<100;i++)
    {
        if(ch[i][0]=='\0')break;
        printf(ch[i]);printf("\n");
    }
    return 0;
}
2016-12-08 17:58
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:2 
是否这样子:
图片附件: 游客没有浏览图片的权限,请 登录注册

#include <stdio.h>

main()
{
    char *p1, *p2, s[100000];
    printf("输入字符串:");
    gets(s);
    for (p1=s; *p1==' '; p1++) NULL;
    p2 = p1;   
    while (*p2)
    {
        for (; *p2!=' ' && *p2; p2++) NULL;
        if (*p2)
        {
            *p2 = 0;
            for (p2++; *p2==' '; p2++) NULL;
        }
        printf("%s\n", p1);
        p1 = p2;
    }
}
2016-12-08 20:43
快速回复:从键盘上输入一串字符串,将其中的单词(单词之间以空格作为分隔符)按 ...
数据加载中...
 
   



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

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