// // main.c // 测试题 8 // 8、 在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。(C语言) // Created by black on 15/11/2. // Copyright © 2015年 black. All rights reserved. //
#include <stdio.h> #include <string.h>
int main(int argc, const char * argv[]) {
// 定义一个字符串数组,用来获取键盘输入的字符串 char str[100]; // 定义一个指针数组,用来记录每一个单词的首字母地址 char *word[20]; // 定义countWord,用来记录单词个数 int countWord = 0;
// 提示输入字符串 printf("请输入一个字符串\n"); // 获取字符串 fgets(str, sizeof(str), stdin);
// 定义len,记录字符串的长度 long len = strlen(str); // 定义max,用来记录最长单词的长度 int maxWordLen = 0; // 获取到str后,先记录第一个单词的首地址,为str[0] word[countWord] = &str[0]; countWord++;
// 循环str[],遇到空格时说明空格分离了两个单词,指针数组第countWord个元素 // 指向空格后的地址,即为下一个单词的首地址,并把空格变成'\0',countWord++ for (int i=0;i<len;i++) { if (' ' == str) { word[countWord] = &str[i+1]; countWord++; str = '\0'; }else if ('\n' == str) { // 解决str最后一个字符是\n的情况,\n会影响word长度的计算 str = '\0'; } } // 遍历word[],找到最长的单词,但是最长的单词可能不止一个 for (int i=0; i<countWord; i++) { if (strlen(word)>maxWordLen) { maxWordLen = (int)strlen(word); } }
printf("最长的单词为:\n");
// 最长单词的长度与每个单词的长度比较,相同时,打印单词 for (int i=0; i<countWord; i++) { if (strlen(word) == maxWordLen) { printf("%s\n",word); } } return 0; } 不完善之处:此方法在查找到最长的单词之后,最初的字符串也被修改了。并且如果遇到多个空格的话,多余的空格也会被记录为单词数。由于题目并没有要求,所以就没有优化。其实c函数中有可以完成从字符串中提取单词功能的函数,strtok(),头文件<string.h>。此处并没有使用。
|