编辑代码

#include <stdio.h>
#include <string.h>

char str[10000][10000]={'\0'};//设为全局变量,防止栈溢出(10000太大)

int main () 
{
    int num=0,count=0;
    char temp='\0';

    //将每个子串输入到对应的二维数组的行,并记录有多少个子串
    for(int i=0;i<1000;i++)
    {
        scanf("%s",&str[i][0]);
        
        if(str[i][0]=='\0')
            break;
        
        num++;
    }
    
    //判断每个子串
    for(int i=0;i<num;i++)
    {
        int len=strlen(str[i]);//获取当前子串长度
        int nonum=1;

        //判断子串中是否有其他非字母字符
        for(int j=0;j<len;j++)
        {
            if(isalpha(str[i][j])==0)
                nonum=0;
        }

        //如果子串没有其他非字母字符
        if(nonum==1)
        {
            //反转子串中的字母
            for(int j=0;j<len/2;j++)
            {
                temp=str[i][len-j-1];
                str[i][len-j-1]=str[i][j];
                str[i][j]=temp;
            }

            //判断是否符合相对开音节的结构
            for(int k=0;k<len-3;k++)
            {
                if((str[i][k+1]=='a'||str[i][k+1]=='e'||str[i][k+1]=='i'||str[i][k+1]=='o'||str[i][k+1]=='u') && !(str[i][k+0]=='a'||str[i][k+0]=='e'||str[i][k+0]=='i'||str[i][k+0]=='o'||str[i][k+0]=='u') && !(str[i][k+2]=='a'||str[i][k+2]=='e'||str[i][k+2]=='i'||str[i][k+2]=='o'||str[i][k+2]=='u' || str[i][k+2]=='r') && (str[i][k+3]=='e'))
                {
                    count++;
                }
            }
        }
    }

    printf("%d",count);
}