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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。

1 个回复

倒序浏览
想了老半天只能这样了有点啰嗦。。
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main() {
  4.    
  5.     char ch[100]; // 存字符串差不多够了。。
  6.     printf("请输入字符串:\n");
  7.     // 录入除了'\n'以外的字符,为了能录入空格
  8.     // gets有个警告我就百度了这个-_-||
  9.     scanf("%[^'\n']", ch);
  10.    
  11.     char *p = ch;
  12.     char temp[20];      // 临时存字符用
  13.     char str[20] = {0}; // 存最长的估计够了
  14.     int max = 0;        // 记录最长单词字数
  15.     int count;          // 记录单词字符数
  16.    
  17.     while (*p != '\0') {
  18.         
  19.         count = 0;            // 计数器每循环1次都清零
  20.         memset(temp, 0, 20);  // temp临时数组也是
  21.         
  22.         // 当前字符不是空格也不是尾巴
  23.         while (*p != ' ' && *p != '\0') {
  24.             temp[count] = *p; // 当前字符存起来
  25.             count++;          // 计数+1
  26.             p++;              // 指向下一个字符
  27.         }
  28.         // 来到这说明遇到空格单词存完了,或者到'\0'了
  29.         // 如果新单词比上一个单词字多,就把这个单词交给str保存
  30.         // 一样长的就不考虑了╮(╯_╰)╭
  31.         if (max < count) {
  32.             max = count;
  33.             for (int i = 0; i < count; i++) {
  34.                 // str没被赋值的部分全是0,自带尾巴
  35.                 str[i] = temp[i];
  36.             }
  37.         }
  38.         // 如果真的到了'\0',直接退出外循环
  39.         if (*p == '\0')
  40.             break;
  41.         p++; // 否则说明只是遇到了空格,继续指向下一个字符
  42.     }
  43.     printf("最长单词是%s,字符数:%d\n", str, max);
  44.     return 0;
  45. }
复制代码


还有个C和OC杂交版。。
  1. #import <Foundation/Foundation.h>

  2. int main() {
  3.    
  4.     char ch[100];
  5.     NSLog(@"输入一个字符串!!!");
  6.     scanf("%[^'\n']", ch);
  7.    
  8.     // 把C字符串转为NSString的
  9.     NSString *str = [NSString stringWithUTF8String:ch];
  10.    
  11.     // 用空格@" "把字符串分割放入数组
  12.     NSArray *array = [str componentsSeparatedByString:@" "];
  13.    
  14.     // 假定第一个是最长的 把它变回字符串
  15.     NSString *maxStr = [NSString stringWithString:array[0]];
  16.    
  17.     // 一个个变成字符串然后看谁长 最长的交给maxStr存着
  18.     // 无视第一个也被拿来比较 我不会弄。。
  19.     for (NSString *str in array) {
  20.         if (maxStr.length < str.length) {
  21.             maxStr = str;
  22.         }
  23.     }
  24.     NSLog(@"%@这货最长。。", maxStr);
  25. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马