计算每个纯字母的子串的长度,然后比较,找到最长的纯字母子串。
//求一个字符串中的最长子串
#include <iostream>
using namespace std;
void fun(char str[]);
int main(void)
{
char str[100];
printf("请输入一个字符串:\n");
while(gets(str)!=NULL&&str[0]!='\0')
{
fun(str);
printf("该子串为:%s\n",str);
printf("请输入一个字符串:\n");
}
return 0;
}
void fun(char str[])
{
int i;
int place=0;
int temppoint=0;
int length=0;
int max_length=0;
int flag=0;
for(i=0;i<=strlen(str);i++)
{
if(str[i]=='\n'||!((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')))//如果不是字母
{
if(max_length<length)
{
place=temppoint;
max_length=length;
}
flag=0; //不是字母的标志
length=0;
}
else //如果是字母
{
if(0==flag) //上一个不是字母
temppoint=i;
length++;
flag=1; //字母的标志
}
}
printf("最长子串的字母个数为:%d。\n",max_length);
printf("最长子串的开始位数为:%d。\n",place+1);
for(i=0;i<max_length;i++)
str[i]=str[i+place];
str[i]='\0';//新生成的字符串的结束
}