首先读一个字符,判断该字符是否为字母:
如果该字符为字母,则存入字母缓冲区,如果该字母后面为结束符,则记录该字母组合的长度、起始和结束下标。
如果该字符不是字母,但该字符的前一个字符是字母,则记录该字母组合的长度、起始和结束下标。清空字母缓冲区。
如果该字符不是字母且其前一个字符也不是字母,则读取下一个字符。
#include <stdio.h>
#define SIZE 50
struct stack{
int charCount;
int indexStart;
int indexEnd;
};
int main(){
int i,j,k,wordCount,num,max,ptr;
char strBuffer[SIZE];
struct stack wordStack[SIZE];
char str[]="tom$ww@yyz&z??ABCD** BabyBaby ()";
printf("%s\n",str);
for(i=0;i<SIZE;i++){
wordStack[i].charCount=0;
wordStack[i].indexStart=0;
wordStack[i].indexEnd=0;
}
i=0;j=0;wordCount=0;
while(str[i]!='\0'){
if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z'){
strBuffer[j]=str[i];
i++;j++;
if(str[i]=='\0'){
wordStack[wordCount].charCount=j;
wordStack[wordCount].indexEnd=i-1;
wordStack[wordCount].indexStart=i-j;
wordCount++;
}
}else if(i>=1&&str[i-1]>='A'&&str[i-1]<='Z'||str[i-1]>='a'&&str[i-1]<='z'){
wordStack[wordCount].charCount=j;
wordStack[wordCount].indexEnd=i-1;
wordStack[wordCount].indexStart=i-j;
wordCount++;
for(k=0;k<SIZE;k++){
strBuffer[k]='\0';
}
i++;j=0;
}else{
i++;
j=0;
}
}
max=0;ptr=0;
for(i=0;i<wordCount;i++){
num=wordStack[i].charCount;
if(num>max){
max=num;
ptr=i;
}
}
i=wordStack[ptr].indexStart;
j=wordStack[ptr].indexEnd;
for(k=i;k<=j;k++){
printf("%c",str[k]);
}
return 0;
}