版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/88358361
1. 题目
编写程序:求字符串中的最大字符平台。
一个字符串中的任意一个子序列,若子序列中各字符均相同则被称为字符平台。
编程要求:输入任意一字符串S时,输出S中长度最大的所有字符平台的起始位置以及所含字符,注意字符平台有可能不止一个。
测试数据:AAZZZXYTTT
2. 分析
- 将字符串中所有字符,每一个子序列都看作一个字符串,存入一个二维数组,子序列的划分依据是连续各字符都相同
- 中间出现了一个strlen的问题可参考
3. 代码
#include <stdio.h>
#include <string.h>
#define max 20
int main(){
// char s[max] = {"AAZZZYYTTT"};
char s[max]
// 定义一个二维数组,将连续相同的字符,作为字符串存入a[i]中
char a[max][max];
// len用来记录,所有字符串中的最大长度
int i,j,k,sum,temp,len=0;
printf("请输入测试数据:");
gets(s);
// 开始将所有的字符串,前后相同为一组存入二维数组中,二维数组a[i][j],i代表字符串的个数,j代表每个字符串中的字符的下标
a[0][0] = s[0];
i = k = 1;
j = 0;
while(s[i]!='\0'){
if(s[i]==s[i-1]) a[j][k++] = s[i];
else{
j++;
k = 0;
a[j][k++] = s[i];
}
i++;
}
//计算出所有字符串中的最大长度,赋值给len
for(i=0;i<=j;i++){
temp = strlen(a[i]);
if(len<temp) {
len = temp;
}
}
//将二维数组中和最大长度相等的字符串输出
for(i=0;i<=j;i++){
temp = strlen(a[i]);
if(len==temp){
sum = 0;
for(k=0;k<i;k++) sum = sum + strlen(a[k]);
printf("字符串%s的起始位置为%d\n",a[i],sum+1);
}
}
return 0;
}