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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© SunJiaqi 初级黑马   /  2014-11-22 22:27  /  1433 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
int main(int argc, const char * argv[]) {

    // 函数声明
    void getMaxDirLen(char *,int *,int *,unsigned long );

    // 字典串
    char Dictorys[100]={"interface implementation protected foundation description Range"};

    unsigned long len = strlen(Dictorys);
    int nums[20];  // 再次最后一个字母的位置集
    int lens[20];  // 单词长度集
    getMaxDirLen(Dictorys, nums, lens,len);

    return 0;
}




//按字母长度由大到小排序
void getMaxDirLen(char *Dictorys,int *nums,int *lens,unsigned long len)
{
    int *ls = lens; // 指向位置集的指针
    char *dic = Dictorys; // 指向单词集的指针
    int *n = nums; // 指向最后一个字母位置集的指针
    int a = 0;  // 长度集的大小
    for (int i =0; i<len-1; i++) {
        if(*(dic+i) == ' ')
        {
            *(n+a) = i ;
            if(a==0)
                *(ls+a) = i - *(n+a-1) ;
            else
                *(ls+a) = i - *(n+a-1) -1;
            a++;
        }
    }
    *(n+a) = len ;  // 最后一个单词最后一个字母的位置
    *(ls+a) = len - *(n+a-1) -1;  // 最后一个单词的长度

    // 所有单词的长度
//    for(int i= 0;i<=a;i++)
//    {
//        printf("最后一个单词的最后一个字母的位置 %d\t",nums);
//        printf("最后一个字母的长度 %d\n" ,lens);
//    }

    int tnums;
    int tlens;
    // 位置集和长度集的长度为a+1;
    for(int i=1;i<a+1;i++)
    {
        for(int j=a;j>=i;j--)
        {
            if(*(lens+j)> *(lens+j-1))
            {
                tnums = *(nums+j-1);
                *(nums+j-1) = *(nums+j);
                *(nums+j) = tnums;

                tlens = *(lens+j-1);
                *(lens+j-1) = *(lens+j);
                *(lens+j) = tlens;
            }
        }
    }
    printf("在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。\n");
    printf("字符串为:\t %s \n",Dictorys);
    printf("最长单词为:\t");
    for (int i = nums[0]-lens[0]; i<=nums[0]; i++) {

        printf("%c",Dictorys);
    }
    printf("\t长度为: %d",lens[0]);
    printf("\n");
}

评分

参与人数 2黑马币 +41 收起 理由
Jr_711 + 40 很给力!
星河鹭起 + 1

查看全部评分

8 个回复

正序浏览
Drmshow 发表于 2014-12-25 22:16
这个 运行的时候不能找出最长单词的啊

你先编译一下看看有没有错误,我用记事本直接编写的。后来用VC6.0运行之后也没有问题的!
回复 使用道具 举报
Drmshow 中级黑马 2014-12-25 22:16:55
8#

这个 运行的时候不能找出最长单词的啊
回复 使用道具 举报
#include <stdio.h>

int main()
{
      //1,定义整型变量i,长度len,最大长度mlen,定义指针变量p来保存最长单词的首地址,定义指针变
      // 量pt,定义字符型数组s[1024]来保存读入的字符串,subs[100]来保存最长单词

        int i,len = 0,mlen = 0;
        char *p,*pt,s[1024],subs[100];
     
      //2,打印提示输入字符串
        printf("输入字符串: ");
      //3,读取输入字符串并存入数组s[1024]
        gets(s);
      //4,for循环遍历字符串每一个字符,判断是否到结尾处
        for(pt = s;*pt != '\0';pt++)
        {
       //5,判断是否遇到字符串中的空格,没有遇到空格,累加len
           if(*pt != ' ' ) len++;
       //6,如果遇到空格,判断这次的长度是否比上次的长度长
           else
           {
               if(len > mlen)
       //7,如果是,保存最大长度mlen,移动最长单词首指针,清零长度计数
                {
                   mlen = len;
                   p = pt - len;
                   len = 0;
                }
           }
        }
        //8,for循环将最长单词的每一个字符保存到数组subs[i]中
        for(i = 0;i < mlen;i++) subs[i] = *(p + i);
        //9,保存结束符
        subs[mlen] = '\0';
        //打印最长单词字符串和字符长度
        printf("最长的单词是:%s,其长度是:%d个字符。\n",subs,mlen);
        return 0;
}
回复 使用道具 举报
太长了啊,看到那么多代码就头大了
回复 使用道具 举报
已经头晕……
回复 使用道具 举报
顶一下!!!
回复 使用道具 举报
  1. #include "stdio.h"
  2. int main()
  3. {
  4.         char str[] = "I am a good boy" ; // 已知字符串。
  5.         char *position;  // 定义一个指向最长单词首字母的指针。
  6.     int i = 0;
  7.     int count = 0;  // 该变量存储每个单词的长度。
  8.     int max = 0;  // 存储最长单词的长度。
  9.     int j = 0;
  10.     while(str[i])  // 判断该字符串是否结束。
  11.     {
  12.             count = 0;  // 计算每个单词长度前清零。
  13.             while(str[i] != 32&& str[i] != 0)  // 判断单词或字符串是否结束。
  14.      {
  15.             
  16.          count++;
  17.          i++;
  18.      }
  19.      
  20.      if( max < count) // 将最长单词字符数存入max。
  21.       {
  22.       max = count;
  23.       position =& str[i-max];// 存储最长单词首字母的存储位置。
  24.       
  25.       }
  26.       i++;   
  27.     }
  28.     for(j = 0; j < max; j++) // 输出最长的单词。
  29.     {
  30.             printf("%c",*position);
  31.             *position++;
  32.     }
  33.     return 0;
  34.    
  35. }
复制代码
回复 使用道具 举报
顶顶顶顶顶顶顶顶

评分

参与人数 1黑马币 +17 收起 理由
姗姗呵呵呵呵 + 17 很给力!

查看全部评分

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