测试一个c风格字符串是否是回文字符串,可以过滤掉空格和tab字符
#include "stdafx.h"
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
class StrTest
{
private :
char* ptemp ;
char* pFirst;
char* pLast ;
public :
StrTest(char* str) ;
~StrTest();
void FixStr();
bool IsGoodString() ;
};
StrTest::StrTest(char* str):pFirst(NULL) ,pLast(NULL),ptemp(str)
{
int ilen = strlen(str);
pFirst = (char*)malloc(ilen +1) ;
memset(pFirst ,0 , ilen + 1) ;
}
StrTest::~StrTest()
{
if(NULL != pFirst)
{
free((void*)pFirst);
pFirst = NULL;
}
}
//remove the tab and space
void StrTest::FixStr()
{
char* p = pFirst ;
int ilen = strlen(ptemp) ;
for(int i =0 ;i< ilen ;++i)
{
if(*ptemp != ' ' && *ptemp != '/t')
{
*p = *ptemp ;
p ++ ;
}
ptemp ++ ;
}
pLast = pFirst + strlen(pFirst)-1;
}
bool StrTest::IsGoodString()
{
FixStr();
char* p = pFirst ;
int icnt = strlen(p) /2 ;
//char* pmid = pFirst + icnt ;
for(int i =0 ;i<= icnt ;++i)
{
if(*p != *pLast)
return false;
p ++ ;
pLast -- ;
}
return true;
}
int main(int argc, char* argv[])
{
char* p = "ab cba";
StrTest strtest(p);
cout<<p << (strtest.IsGoodString() == true ?"是回文字符串":"不是回文")<<endl;
printf("Hello World!/n");
return 0;
}