使用数组和无指针创建回文字符串检查器C++

Creating a Palindrome String Checker C++ using Arrays and No Pointers

本文关键字:字符串 回文 检查 C++ 创建 指针 数组      更新时间:2023-10-16

很抱歉,如果这看起来真的很无聊,事实上,我只研究了大约一个月。我似乎无法把这件事做好,不知道你们中是否有人能帮我。这个程序曾经编译过,只说输入的单词"不是回文",即使它们是。

#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 Wordn";
  cin.getline(arr,10);
  flag = isPal(arr, size);
  if (flag == true)
    cout << "Word is Palindromen";
  else
    cout << "Not Palindromen";
  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
}

如果您只想使用纯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. 初始化arr2

  2. 使用strlen来知道您输入的长度,而不是使用size,因为您的输入数据在10 中并不总是固定的

在您的原始代码中:

input: 1234567
*arr => "1234567"
*arr2 => "??7654321" 
  1. 使用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)