输入:一串单词,以空格作为单词的间隔。
输出:最长的单词
代码
思路: 如果不是分隔符且inWord=0,说明首次进入一个新单词,记录单词开始的下标
如果是分隔符且且inWord=1,说明退出单词,计算单词长度并与之前的最长单词对比,记录最新的最长的单词。
注意:最后一个单词如果一直到末尾,需要出循环后单独对比。
#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");
}
运行
int main() {char str[]="aaaaaa bb ccc";char str2[]="a bc ddddddddd";char str3[]="i am cccccc ";longestWord(str);return 0;
}