1

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

reverse 函数有效,但不会传递给 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

4 回答 4

1

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

另外,您将诱惑分配给 0。

于 2013-11-06T01:58:55.877 回答
1

我看到你把 a 和 a 弄错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;    
}
于 2013-11-06T02:02:30.427 回答
0

您的代码中有几个错误。

void legal(char string);返回一个 void,但您尝试在此处分配它:

temp = legal(string);

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

return 0;在合法。

于 2013-11-06T01:59:03.307 回答
0

问题是变量string是一个数组,而legal只接受单个字符值。您可以通过接受指针或数组或它们的某种组合来解决此问题,并且仅检查第一个数字(如果这是您想要的)。

您更正的代码如下所示:

void legal(char *string);

然后在法律函数中,您可以将第一个字符引用为*string.

于 2013-11-06T02:11:32.617 回答