| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2020 人关注过本帖
标题:C语言排列问题
只看楼主 加入收藏
luckyscholes
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-8-16
收藏
 问题点数:0 回复次数:4 
C语言排列问题
本人是C语言新手,现在做作业遇到一个问题,请教各位大大.

如果我输入一段英文的文章,然后用什么方法可以将它按照ABCD...这样的顺序排列出来呢?

比如我输入

I love you, baby. You are my forever.

然后会显示
are               1
baby              1
forever           1
I                 1
love              1
my                1
you               2

后面的数字显示这个单词出现的次数,前面是按照字母排列

请问各位可以给點提示或者帮忙一下嘛?
搜索更多相关主题的帖子: C语言 排列 love ABCD 
2008-08-16 16:47
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
程序代码:
/*******************************************************************************

如果我输入一段英文的文章,然后用什么方法可以将它按照ABCD...这样的顺序排列出来呢?

比如我输入

I love you, baby. You are my forever.

然后会显示
are               1
baby              1
forever           1
I                 1
love              1
my                1
you               2

后面的数字显示这个单词出现的次数,前面是按照字母排列

*******************************************************************************

            根据题意,作出下面很糟糕代码,谨作参考。

################################################################################

            PS:现在测试中遇到了点问题,就是在输入连续标点符号夹带空格的时候,会
        出现单词截取不准的现象,请高手解决。

*******************************************************************************/
#include<stdio.h>
#include<string.h>
#define N 1000
#define Y 20
struct ST
{
        char a[Y];
        int i;
} st[N],s;
int sz(char *a,int n)   /*截取单词函数,形参为字符串和字符串长度*/
{
        int i,j,k,m1=0,m2;
        for(i=0;i<n;i++)
                if(a[i]<65||(a[i]>90&&a[i]<97)||a[i]>122)
                        a[i]='\0';  /*当遇到非字母的情况下,把字符转换为休止符*/
        for(i=0;i<n;i++)
                for(j=i+1;j<=n;j++)
                {
                        if(a[j]=='\0'&&a[j+1]!='\0'||j==n)
                        /*当出现休止符而下一个是字母或者字符串结束*/
                        {
                                for(k=i,m2=0;k<j;k++,m2++)
                                        st[m1].a[m2]=a[k]; /*把单词赋值给结构体*/
                                i=k+1;
                                st[m1].a[m2]='\0';     /*加上休止符*/
                                m1++;
                        }
                }
        return m1;  /* 返回结构体数组的长度 */
}
int px(int n)   /*结构体排序函数,形参为结构体数组长度*/
{
        int i,j,k,m=0;
        for(i=0;i<n;i++)
                st[i].i=1;  /*将结构体中记数器赋值为1*/
        for(i=0;i<n;i++)
                for(j=i+1;j<n;j++)
                {
                        if(strcmp(st[i].a,st[j].a)>0)
                         /*比较结构体中字符串,如果是逆序的,就将它转换*/
                        {
                                s=st[i];
                                st[i]=st[j];
                                st[j]=s;
                        }
                        if(strcmp(st[i].a,st[j].a)==0)
                        /*当结构体中出现相同字符串时,把记数器加1,并将相同的结构
                        体删除*/
                        {
                                st[i].i+=1;
                                for(k=j;k<n;k++)
                                        st[k]=st[k+1];
                                n--;
                         }
                 }
        return n;
}
int main(void)
{
        int i,n,m,k;
        char a[Y];
        printf("请输入一段文章:\n");
        gets(a);
        n=strlen(a);
        m=sz(a,n);
        k=px(m);
        for(i=0;i<k;i++)
                printf("%20s%5d\n",st[i].a,st[i].i);
        getch();
}
2008-08-18 15:23
google
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:3419
专家分:23
注 册:2005-11-1
收藏
得分:0 
:)

[[it] 本帖最后由 google 于 2008-8-18 15:30 编辑 [/it]]

祝天下所有母亲幸福安康!~
2008-08-18 15:29
luckyscholes
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2008-8-16
收藏
得分:0 
回复 2# 广陵绝唱 的帖子
谢谢楼上的..我自己也寫了一个程序,不知道还需要那些改进.
#include <stdio.h>
#include <ctype.h>
#include <string.h>

#define MAXWORDS 1000
#define MAXCHARS 20

int getword(char word[MAXCHARS + 1], int chars);


int main(int argc, char **argv) {

  char words[MAXCHARS+1];
  char text[MAXWORDS][MAXCHARS+1];
  int numofwords = 0;
  int i = 0, j = 0;

  while(getword(words, MAXCHARS)!= EOF) {

    if (numofwords < MAXWORDS) {
      strcpy(text[numofwords], words);
    }

    numofwords++;
  }

  char temp[MAXWORDS + 1];

  for (i = 0; i < (numofwords - 1); i++) {
    for (j = (i + 1); j < numofwords; j++) {
      if (strcasecmp(text[i], text[j]) > 0) {
        strcpy(temp, text[i]);
        strcpy(text[i], text[j]);
        strcpy(text[j], temp);
      }
    }
  }
  
  int sum = 0;
  int number = 1;

  for (i = 0; i < (numofwords - 1); i++) {
    if(strcasecmp(text[i],text[i + 1]) == 0) {
      number++;
    } else {
      printf("%-10s          %5d\n", text[i],number);
      sum = sum + number;
      number = 1;
    }
  }

  printf("%-10s          %5d\n", text[numofwords - 1], (numofwords - sum));
  printf("Processing completed\n");




  return 0;
}

int getword(char *word, int chars) {

  char c;

  c = getchar();
  while(c != EOF && !isalpha(c)) {
    c = getchar();
  }

  if (c == EOF) {
    return EOF;
  }

  *word = c;
   word =word + 1;
   chars--;

   c = getchar();
   while(c != EOF && isalpha(c) && chars > 0) {
     *word = c;
     word = word + 1;
     chars--;
     c = getchar();
   }

   *word = '\0';

   return 0;
}
2008-08-18 22:16
tracyice
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-8-20
收藏
得分:0 
还有什么其他的方法吗?
2008-08-20 13:17
快速回复:C语言排列问题
数据加载中...
 
   



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

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