黑马程序员技术交流社区
标题:
[代码分享] 在一个已知的字符串中查找最长单词
[打印本页]
作者:
wslinke
时间:
2015-4-17 14:29
标题:
[代码分享] 在一个已知的字符串中查找最长单词
//
// main.m
// 测试题8
//
// Created by 林柯 on 15/4/15.
// Copyright (c) 2015年 itcast. All rights reserved.
//
/*
8、 在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。(C语言)
设计思路: 在字符串中寻找第一个字母,开始计数,直到遇见空格,即一个单词结束,保存该单词长度与开始和结束的位置,
继续寻找下一个单词,并该单词的长度大于原来保存的长度,则将该单词的起止位置和长度替换掉原来的.
依此循环,直到读入'\0',循环结束;
该程序处理一个字符串时,若该字符串中最长单词长度的单词不止一个,只会输出第一个遇到的该长度的单词
*/
#include <stdio.h>
#include <stdbool.h>
int main(void)
{
//定义一个字符串用来测试程序
char str[] = " hello world hello itcast helloWorld";
//定义3个整型变量,存放当前单词在字符串中的起始位置、结束位置,该单词的长度
int begin = 0,end = 0,length;
//定义3个整型变量,用来存放最长单词的起始位置、结束位置、单词长度
int maxLength,maxBegin,maxEnd;
//初始化用来保存最长单词的属性,防止字符串中没有字符时程序出错
maxLength = maxBegin = maxEnd = 0;
//定义一个布尔类型的值,来判断是否到达字符串末尾
bool isEnd = false;
//开始查找字符串中的单词,直到字符串末尾
while (!isEnd) {
//"跳过字符串中位于单词前面的空格,碰到字母或'\0'停止
while (*(str+begin) == ' ') {
begin++;
} //循环结束 begin代表单词的第一个字母或者'\0'在字符串中的位置
//若在单词还未开始就读入'\0',代表字符串结束,没有新的单词需要比较,则直接退出循环
if(*(str+begin) == '\0')
break;
//将begin位置的后一个字符的索引赋给end
end = begin+1;
//统计字符串中单词字母或者'\0',遇到空格结束
while (*(str+end) != ' ') {
//在单词已经开始计数时遇到'\0',代表该单词结束,且是最后一个单词
//在比较结束后退出外层循环
if(*(str+end) == '\0')
{
isEnd = true;
break;
}
end++;
}//循环结束 end代表单词后的第一个空格或者'\0'
//获取当前单词长度
length = end - begin;
//如果当前单词长度大于之前保存的maxLength,表示该单词时目前查找到的最长单词
//则用该单词替换之前保存的单词
if (length > maxLength) {
maxLength = length;
maxBegin = begin;
maxEnd = end;
}
//将end地址赋值给begin,开始查找下一个单词
begin = end;
}
//整个字符串检索完毕,输出记录的单词,若字符串为空,则不进行任何输出
for (int i = maxBegin; i < maxEnd; i++) {
putchar(str[i]);
}
return 0;
}
复制代码
作者:
wslinke
时间:
2015-4-17 14:31
代码有点略长,希望有兴趣的朋友可以耐心看看
给我一些建议,大家共同进步
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2