我试图扭转字符串,以便它可以读取字母y作为元音

时间:2013-11-06 01:54:00

标签: c

我正在翻转字符串,例如,如果我输入单词'try',它会将y读为元音并打印出该单词是合法的。

反向函数有效,但它不会传递给switch语句值。

的#include     // #include

void rev(char *);
void legal(char string);

int main()
{

     char string[50];
     char temp;
     printf("Enter any string:");
     scanf(" %s",&string);
     //printf("Before reversing the string %s\t",string);

     rev(string);
     printf("\nReverse String is %s",string);
     temp = legal(string);
     printf("\nReverse String is %s",temp);

return 0;
}

void legal(char string)

{   


      switch(string)
    {
    case 'A':
    case 'E':
    case 'I':
    case 'O':
    case 'U':
    case 'Y':
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
    case 'y':
    printf("\nWord is legal");
    break;
    default:    
    printf("\nWord is not legal");  
    break;
    }

return 0;    

}


//reversing string using pointers
void rev(char *str)

{
     char *str1,temp;
     str1=str;
     while(*str1!='\0')
     str1++;                  
     str1--;                                  
     while(str<str1)
     {
        temp=*str;                  
        *str=*str1;                  
        *str1=temp;                  
        str++;
        str1--;
     }
}

4 个答案:

答案 0 :(得分:1)

C ++不允许在交换机指令中使用字符串或数组,这可能是问题所在。

另外,你将诱惑指定为0。

答案 1 :(得分:1)

我发现您误将char *误认为char

相反,你必须逐个字符地循环遍历字符串,如果单词是否合法则用数字标识出来。

这是我将如何做,而不是提前测试代码:

void rev(char *);
void legal(char *string);

int main()
{

     char string[50];
     int temp;
     printf("Enter any string:");
     scanf(" %s",&string);
     //printf("Before reversing the string %s\t",string);

     rev(string);
     printf("\nReverse String is %s",string);
     temp = legal(string);

     printf("\nLegal? %d",temp);

return 0;
}

int legal(char *string)
{   
    char *ch = string;
    int flag = 0;
    while(*ch != '\0'){
     switch(*ch)
     {
    case 'A':
    case 'E':
    case 'I':
    case 'O':
    case 'U':
    case 'Y':
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
    case 'y':
      flag = 1;
    break;
    default:    
      //nothing  
    break;
    }
   }
   if(flag == 1){
      printf("word is legal!");
   }else{
      printf("word is illegal!");
   }
    return flag;    
}

答案 2 :(得分:0)

您的代码中存在多个错误。

void legal(char string);返回一个空格,但您尝试在此处指定它:

temp = legal(string);

legal需要一个字符,但您尝试将char []传递给它。

return 0;合法。

答案 3 :(得分:0)

问题是变量string是一个数组,而legal只接受单个char值。您可以通过接受指针或数组或其中的某种组合来修复此问题,并且只检查第一个数字是否符合您的要求。

您更正后的代码如下所示:

void legal(char *string);

然后在法律功能内部,您可以将第一个字符引用为*string