再会!我们的老师要求我们确定一个单词或一系列数字是否是回文或不使用堆栈。我已经完成了。但是我想练习更多所以现在我试图通过删除空格和其他不相关的字符来确定一个句子是否是回文(注意:不再是我的家庭作业的一部分)我的代码已经在工作(希望如此)但我发现它很乱。所以我想改进它。我想删除 goto 功能,因为我的老师建议我不要使用它。如何使用 goto 函数退出 if 语句?先感谢您。还有其他方法可以检查一个句子是否是回文,因为我的代码是用蛮力方法完成的。我的代码如下:注意(我没有在此处包含/粘贴结构以及弹出和推送功能)
int main(){
char word[11];
char temp[11];
char value;
int i=0, x=0, n=0, length=0;
Stack*head = NULL;
printf("Please type the word: ");
gets(word);
length = strlen(word);
while(i<length){
if(isspace(word[i]) || !isalpha(word[i])) {
if(isdigit(word[i])) goto NEXT; // i used the goto function here
i++;
continue;
}
NEXT:
temp[n]=word[i];
push(&head, word[i]);
i++;
n++;
}
temp[n]='\0';
while(x<n){
value = pop(&head);
if (value==temp[x]){
x++;
continue;
}
break;
}
if(x==n) printf("Yehey! It is a palindrome.");
else printf("Sorry, It is not a palindrome.");
getch();
}
根据您的建议。这是我改进的代码:
int main(){
char word[11];
char temp[11];
int i=0, n=0;
int flag = 1;
Stack*head = NULL;
printf("Please type the word: ");
fgets(word, 11, stdin);
for(i = 0; word[i]!='\0' ; i++){
if(isalnum(word[i])) {
temp[n]=word[i];
push(&head, word[i]);
n++;
}
}
temp[n]='\0';
for(i=0; temp[i]!='\0'; i++){
if (pop(&head)!=temp[i]){
flag = 0;
break;
}
}
if (flag==1) printf("Yehey! It is a palindrome.");
else printf("Sorry, It is not a palindrome.");
getch();
}