黑马程序员技术交流社区
标题: 【基础测试 八】 [打印本页]
作者: black747521 时间: 2015-11-8 21:09
标题: 【基础测试 八】
//
// 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>。此处并没有使用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |