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

时间:2014-10-29 18:49:10

标签: c++ arrays string palindrome

对不起,如果这看起来真的很无聊,事实是,我现在只研究了一个月。我似乎无法正常工作,想知道你们中是否有人可以帮助我。编程后的程序只说输入的单词是"不是回文"即使他们是。

#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
}

2 个答案:

答案 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)

  1. 初始化arr2

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

  3. 在原始代码中:

    input: 1234567
    *arr => "1234567\0"
    *arr2 => "??\07654321" 
    
    1. 使用size替换为q
    2. 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)