我正在翻转字符串,例如,如果我输入单词'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--;
}
}
答案 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
。