/*
编程实现
输入一个字符串例如:“eegff”,求出对称字符串的个数。
如:ee,ff,eegff就称为对称字符串,对称字符串个数为3。
思路:
1.分解字符串,如输入字符串“eegff”,先从第一个字符开始'e'
按如下的方法分解:ee、eeg、eegf、eegff;
2.每分解一个字符串出来存储到一个字符数组中,在到数组中
循环判断该字符串是否是对称的;
3.如果判断是对称字符串,则用一个统计变量自增一。依照1、2
步骤一次从下一个字符串开始分解判断,一直到倒数第二个字符
就停止判断;
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//该方法,查找对称字符串的个数
int symmetry_str(char *p)
{
int len = strlen(p), num = 0;
int i = 0, j = 0, n = 0,h = 0, count = 0;
char ctemp = '\0';
char ch[10];
bool b = false;
if(len < 2)
{
return 0;
}
for(i = 0; i < len - 1; i++)
{
for(j = i + 1; j < len; j++)
{
for(int k =i; k <= j; k++)
{//字符串的分解
ch[h++] = *(p + k);
}
ch[h] = '\0';
num = strlen(ch);//ch数组存储的长度
h = 0;
if(num >= 2)
{
for(int t = 0, g = num -1; t < num/2 && t != g; t++,g--)
{//字符判断,没有考虑到一种情况比如“aaa”,
//这里算的是三个对称的字符串“aa aaa aa”
if(ch[t] == ch[g])
{
b = true;
}else{
b = false;
break;
}
}
if(b)
{
printf("%s\n",ch);
count++;
}
}//end if
}
}
return count;
}
void main()
{
char st[10];//输入的字符串长度不要大于10
printf("Please input a string:\n");
scanf("%s",st);
printf("%d\n",symmetry_str(st));
}