[英]How to reverse an array and store the values of the reversed array in a new array
[英]How to compare an array to a reversed one and check if their values match?
我編寫了一個用strrev()
函數反轉數組的程序,並檢查它的值是否與原始數據匹配, strrev()
回文。 當值匹配時,它會打印Palindrome
,否則, Not a palindrome
。
但是當我比較它們,並且值不匹配時,它仍會打印Palindrome
。
這是代碼:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <string.h>
#define MAX_LEN 100
void palindrom(char string[]);
int main()
{
char string[MAX_LEN] = { 0 };
printf("Enter string (max length 100 chars): ");
fgets(string, MAX_LEN, stdin);
if(string[strlen(string)-1] == '\n') { string[strlen(string)-1] = 0; }
palindrom(string);
return (0);
}
void palindrom(char string[])
{
int check = 0;
check = strcmp(strrev(string), string);
if (check == 0)
{
printf("Palindrome");
}
else
{
printf("Not a palindrome");
}
}
我的問題是什么? 謝謝。
從我可以告訴strrev
也可以修改原始字符串,所以你需要復制它。
關鍵是strrev
。
這是C中的一個程序,可以執行您正在測試的內容:
#include <stdio.h>
#include <string.h>
int main()
{
char a[100], b[100];
printf("Enter the string to check if it is a palindrome\n");
fgets(a, 100, stdin);
strcpy(b,a);
strrev(b);
if (strcmp(a,b) == 0)
printf("Entered string is a palindrome.\n");
else
printf("Entered string is not a palindrome.\n");
return 0;
}
由於其他人已經澄清了問題所在,我想指出檢查s [0] == s [len-1],s [1] == s [len-2]是否會更快,直到一半已經檢查了字符串的(四舍五入)。
這將不需要額外的內存,沒有副本和一半的比較。 有點像:
void palindrom(char string[])
{
int len = strlen(string) - 1;
int i, limit = len/2 + (len % 2);
for (i = 0; i < limit; i++){
if (string[i] != string[len-i]){
printf("Not a palindrome\n");
return;
}
}
printf("Palindrome\n");
}
您的函數失敗,因為strrev
修改了字符串。 您實際上總是將反向字符串與自身進行比較。
這是一個不修改字符串的備用函數:
void palindrom(const char *str) {
for (size_t i = 0, j = strlen(str); i < j; i++, j--) {
if (str[i] != str[j - 1]) {
printf("Not a palindrome\n");
return;
}
}
printf("Palindrome\n");
}
您不需要使用strrev
來測試回文,以下函數在不使用非標准C函數的情況下檢測到回文就好了:
int ispalindrome(char *str, int len)
{
char *p = &str[0];
char *q = &str[len - 1];
do
{
if(p >= q)
{
return 1;
}
} while (*p++ == *q--);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.