黑马程序员技术交流社区

标题: 基础测试题分享,如有错误欢迎指正!! [打印本页]

作者: baihe0813    时间: 2015-1-1 08:04
标题: 基础测试题分享,如有错误欢迎指正!!
  1. //在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
  2.         
  3.         //声明一个字符串
  4.         char* str = "Keep on going never give up";
  5.         //声明一个数组,用来存放字符串的子字符串
  6.         char* subStr[20];
  7.         //声明一个数组,用来存放每个子字符串的长度
  8.         int length[20];
  9.         //说明子字符串的个数
  10.         int subCount = 0;
  11.         int i = 0;
  12.         //j用来表明下一个子字符串的起始位置
  13.         int j = i;
  14.         //用来指向动态分配的空间
  15.         char* temp;
  16.         
  17.         //遍历大字符串的所有元素。
  18.         while (str[i] != '\0')
  19.         {
  20.             if(str[i] == ' ')
  21.             {
  22.                 //如果某个元素为空格的话,则获取相应的子字符串
  23.                 temp = (char*)malloc((i - j + 1) * sizeof(char));
  24.                 int count = 0;
  25.                 for(int k = j; k<i; k++)
  26.                 {
  27.                     temp[count] = str[k];
  28.                     //将子字符创放到子字符串数组中
  29.                     subStr[subCount] = temp;
  30.                     count++;
  31.                 }
  32.                 //字符串结束标识
  33.                 temp[count] = '\0';
  34.                 //将长度放到长度数组中
  35.                 length[subCount] = count;
  36.                 subCount++;
  37.                
  38.                 //让j指向下一个子字符串的起始下标
  39.                 j = i + 1;
  40.             }
  41.             i++;
  42.         }
  43.         
  44.         //这是对结尾处的最后一个子串进行操作,步骤同前面一样
  45.         temp = (char*)malloc((i - j + 1) * sizeof(char));
  46.         int count = 0;
  47.         for(int k = j; k<i; k++)
  48.         {
  49.             temp[count] = str[k];
  50.             subStr[subCount] = temp;
  51.             count++;
  52.         }
  53.         temp[count] = '\0';
  54.         length[subCount] = count;
  55.         subCount++;
  56.         
  57.         //计算出长度数组中至最大的元素
  58.         int maxLength = length[0];
  59.         for(int i = 0; i<subCount; i++)
  60.         {
  61.             if(maxLength < length[i])
  62.             {
  63.                 maxLength = length[i];
  64.             }
  65.             //打印子字符串数组和长度数组中的每一个元素,他们是相互对应的
  66.             printf("%s, %i\n", subStr[i], length[i]);
  67.         }
  68.         //打印数组中长度最大的值
  69.         printf("maxlength: %i\n", maxLength);
  70.         
  71.         //遍历子字符串数组,找到长度最长的子字符串,打印,可能是多个。。
  72.         for(int i = 0; i<subCount; i++)
  73.         {
  74.             if(strlen(subStr[i]) == maxLength)
  75.             {
  76.                 printf("max long string : %s\n", subStr[i]);
  77.             }
  78.             //将对上的空间都释放掉。
  79.             free(subStr[i]);
  80.         }
  81.    
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2