检查两个索引之间的回文
Checking for palindrome between two indices
我正在尝试检查字符串是否包含给定索引之间的回文。但是我无法在我的代码中找到错误。
bool isPal(char a[],int i,int j){
for(int k=i;k<(j-i)/2;k++)
if(a[k]!=a[j--])
return 0;
return 1;
}
您在循环内修改 j
,同时更改结束条件(无论如何都不正确),您可以改用:
bool isPal(const char a[],int i,int j){
for (int k = 0; k < (j - i) / 2 ; k++) {
if (a[i + k] != a[j - k]) {
return false;
}
}
return true;
}
您的代码的最小更改为:
bool isPal(char a[], int i, int j)
{
const int mid_index = (j + i) / 2;
for (int k = i; k < mid_index; k++)
if (a[k] != a[j--])
return 0;
return 1;
}
您正在使用 j--
更改 j 的值,这将影响您的 for 循环的条件 k<(j-1)
您的错误是将 j
递增,但还假设(在循环条件中)它保持其输入值。您也可以将输入变量用作循环变量
bool isPalindrome(const char*a, int i, int j) {
while(i<j)
if(a[i++] != a[j--])
return false;
return true;
}
当为循环设置正确的停止条件时很简单。
for(int k=i;k<(j-i)/2;k++)
您从 i 开始,然后上升到 j-i-1。这不是你想要的。将 i 和 j 替换为一些值,您会看到。
我正在尝试检查字符串是否包含给定索引之间的回文。但是我无法在我的代码中找到错误。
bool isPal(char a[],int i,int j){
for(int k=i;k<(j-i)/2;k++)
if(a[k]!=a[j--])
return 0;
return 1;
}
您在循环内修改 j
,同时更改结束条件(无论如何都不正确),您可以改用:
bool isPal(const char a[],int i,int j){
for (int k = 0; k < (j - i) / 2 ; k++) {
if (a[i + k] != a[j - k]) {
return false;
}
}
return true;
}
您的代码的最小更改为:
bool isPal(char a[], int i, int j)
{
const int mid_index = (j + i) / 2;
for (int k = i; k < mid_index; k++)
if (a[k] != a[j--])
return 0;
return 1;
}
您正在使用 j--
更改 j 的值,这将影响您的 for 循环的条件 k<(j-1)
您的错误是将 j
递增,但还假设(在循环条件中)它保持其输入值。您也可以将输入变量用作循环变量
bool isPalindrome(const char*a, int i, int j) {
while(i<j)
if(a[i++] != a[j--])
return false;
return true;
}
当为循环设置正确的停止条件时很简单。
for(int k=i;k<(j-i)/2;k++)
您从 i 开始,然后上升到 j-i-1。这不是你想要的。将 i 和 j 替换为一些值,您会看到。