对不起,如果这看起来真的很无聊,事实是,我现在只研究了一个月。我似乎无法正常工作,想知道你们中是否有人可以帮助我。编程后的程序只说输入的单词是"不是回文"即使他们是。
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
bool isPal (char[], int);
int main ()
{
const int size = 10;
int flag = 0;
char arr[size];
cout << "Enter Word\n";
cin.getline(arr,10);
flag = isPal(arr, size);
if (flag == true)
cout << "Word is Palindrome\n";
else
cout << "Not Palindrome\n";
return 0;
}
bool isPal (char arr [],int size)
{
int q = 0;
char arr2[size];
for (int i = 0;i < size - 1; i++)
{
arr2[i] = arr[9 - q]; //here I attempt to reverse arr1 and assign each element to arr2
q++;
}
for (int j = 0; j < size - 1; j++)
{
if (arr [j] != arr2[j])
return false;
}
return true
}
答案 0 :(得分:0)
如果您只想使用普通C数组,请使用以下代码进行检查: -
bool isPallindrome ( char *p, int size ) //Remember here size must be one character before null //terminator.
{
char *begin, *end;
begin = p;
end = p + size;
while ( begin != end )
{
if( *begin != *end )
break;
begin++;
end--;
}
if ( begin != end )
return false;
return true;
}
答案 1 :(得分:0)
初始化arr2
使用strlen
知道您输入的长度而不是size
,因为您的输入数据并不总是固定在10
在原始代码中:
input: 1234567
*arr => "1234567\0"
*arr2 => "??\07654321"
size
替换为q
bool isPal (char arr [],int size) { //q=0; /* modified 3 */ char arr2[size] = ""; /* modified 1 */ for (int i=0; i<strlen(arr); i++) /* modified 2 */ { arr2[i] = arr[strlen(arr)-i-1]; /* modified 2 */ //q++; /* modified 3 */ } for (int i=0; i<strlen(arr); i++) /* modified 2 */ { if (arr[i] != arr2[i]) return false; } return true }
数组是“指向数组地址开头的指针”,但对于新手来说,要知道它是如何工作的并不容易。在学习章节pointer
按照修改后的原始代码示例:
char arr[size];
char arr2[size];
// char *parr = (char*)malloc(sizeof(char)*size);
// char *parr2 = (char*)malloc(sizeof(char)*size);
cin.getline(arr,10);
// parr = &arr[0];
// cin.getline(parr, 10);
arr2[i] = arr[9 - q];
// parr1 = &arr[9-q];
// parr2 = &arr2[i]
// *parr2 = *parr1;
if (arr [j] != arr2[j])
// parr1 = &arr[j]
// parr2 = &arr2[j]
// if (*parr1 != *parr2)