C程序设计 (第四版) 谭浩强 习题7.10
习题 7.10 写一个函数,输入一行字符,将此字符串中最长的单词输出。
IDE工具:VS2010
Note: 使用不同的IDE工具可能有部分差异。
代码块
方法1:使用数组
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 80
void longestWord(char str[]){
int len = strlen(str);
int wordLen = 0;
int longLen = 0;
int sign = 0;
char tempStr[N];
char longStr[N];
for(int i = 0, j = 0; i < len; i++){
if((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')){
sign = 1;
tempStr[j++] = str[i];
wordLen++;
}
else if(sign == 1){
tempStr[j] = '\0';
if(wordLen > longLen){
longLen = wordLen;
strcpy(longStr, tempStr);
}
sign = 0;
wordLen = 0;
j = 0;
}
}
printf("Longest Word: %s\n", longStr);
}
int main(){
char str[N];
printf("Enter string: ");
gets(str);
longestWord(str);
system("pause");
return 0;
}
方法2:最长单词有多个的情况(感谢@weixin_52612652提出的问题)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 80
void longestWord(char str[]){
int len = strlen(str);
int wordLen = 0;
int longLen = 0;
int sign = 0;
char tempStr[N];
char longStr[N][N];
int s = 0;
int i, j;
for(i = 0, j = 0; i < len; i++){
if((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')){
sign = 1;
tempStr[j++] = str[i];
wordLen++;
}
else if(sign == 1){
tempStr[j] = '\0';
if(wordLen >= longLen){
longLen = wordLen;
strcpy(longStr[s++], tempStr);
}
sign = 0;
wordLen = 0;
j = 0;
}
}
if(sign == 1 && wordLen >= longLen){
tempStr[j] = '\0';
strcpy(longStr[s++], tempStr);
}
for(int i = 0; i < s; i++){
printf("Longest Word: %s\n", longStr[i]);
}
}
int main(){
char str[N];
printf("Enter string: ");
scanf("%[^\n]", str);
longestWord(str);
system("pause");
return 0;
}