输入:一串单词,以空格作为单词的间隔。
输出:最长的单词
代码
思路: 如果不是分隔符且inWord=0,说明首次进入一个新单词,记录单词开始的下标
如果是分隔符且且inWord=1,说明退出单词,计算单词长度并与之前的最长单词对比,记录最新的最长的单词。
注意:最后一个单词如果一直到末尾,需要出循环后单独对比。
c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void longestWord(char *str) {
int wordStartIndex = 0; //记录每个单词开始
int wordLength = 0; //记录每个单词长度
int maxLen = 0;
int maxStartIndex = 0;
int inWord = 0;
int i;
for (i = 0; str[i] != '\0'; i++) {
if (isspace(str[i])) {
if (inWord) {
// 退出一个单词
wordLength = i - wordStartIndex; //目前这个单词长度
inWord = 0;
if (maxLen < wordLength) {
// 存在单词比之前的单词长
maxLen = wordLength;
maxStartIndex = wordStartIndex;
}
}
} else {
if (!inWord) {
wordStartIndex = i; //进入一个新单词,记录这个单词起始位置
}
inWord = 1;
}
}
if (inWord) {
// 最后一个单词后面没空格
wordLength = i - wordStartIndex;
if (maxLen < wordLength) {
maxStartIndex = wordStartIndex;
}
}
for (int j = maxStartIndex; ; j++) {
if (isspace(str[j]) || str[j] == '\0') {
break;
}
printf("%c", str[j]);
}
printf("\n");
}
运行
c
int main() {
char str[]="aaaaaa bb ccc";
char str2[]="a bc ddddddddd";
char str3[]="i am cccccc ";
longestWord(str);
return 0;
}
