C++用递归判断一个字符串是否是回文,忽略空格和标点

C++用递归判断一个字符串是否是回文,忽略空格和标点,第1张

bool testPalindrome(const char st[])

{

int i=0,j=strlen(st);

while(i<=j)

{

while(st[i]<'a'&&st[i]>'Z'||st[i]<'A'||st[i]>'z')

i++;

while(st[j]<'a'&&st[j]>'Z'||st[j]<'A'||st[j]>'z')

j--;

if(i!=j) return false;

}

return true;

}

#include<iostream>

using namespace std;

char s[100];

int recurs(int i,int j)

{

if(s[i]!=s[j])return 0;

else if(i>j-2)return 1;

else return return(i+1,j-1);

}

void main()

{

int i;

cout<<"输入一个字符串:";

cin>>s;

for(i=0;s[i];i++);

if(recurs(0,i-1))

cout<<"是回文串"<<endl;

else

cout<<"不是回文串"<<endl;

}

bool test(char s[],int firstInd,int lastInd)

{

if(lastInd<=firstInd) return true;

else

{

if(s[lastInd]!=s[firstInd])

return false;

else

return test(s,firstInd+1,lastInd-1);

}

}

public void numpal(){

ArrayList<Integer> input = new ArrayList<Integer>();

Scanner sc = new Scanner(Systemin);

Pattern inte = Patterncompile("^\\d+$");

String in = scnext();

while(null != in && intematcher(in)matches()){

inputadd(IntegerparseInt(in));

Scanner sc2 = new Scanner(Systemin);

in = sc2next();

}

if(diguinumpal(input, 0)){

Systemoutprintln("yes");

}else{

Systemoutprintln("no");

}

}

public boolean diguinumpal(ArrayList<Integer> arr, int index){

if(arrsize() < 2){

Systemoutprintln(index);

return true;

}else if(arrget(index) != arrget(arrsize() -1 -index)){

Systemoutprintln(arrget(index)+"!="+arrget(arrsize() -1)+" "+index);

return false;

}else if((arrsize() - 2(index +1)) > 1){

return diguinumpal(arr, index +1);

}else{

Systemoutprintln(index);

return true;

}

}

如果输入的字符不是数字就开始判断是不是回文。

#include <stdioh>

#include <stringh>

int hui(char a[100000],int n,int i)//这里我用了3个参数,中间的n是最末尾的坐标,最后的i是第一位的坐标

{ if(n==i&&a[i]==a[n]) return 1;//这事判断是否为回文的条件,

else

{

if (a[i]==a[n]) {hui(a,n-1,i+1);}//如果相当了 让i向后移动 让n向前移动

else {return 0;}

}

}

int main()

{

int len;

char a[100000];

gets(a);

printf("%s\n",a);

len=strlen(a);

if (len==0)

printf("No\n");

else

{

if (hui(a,len-1,0)) {printf("Yes\n");}

else {printf("No\n");}

}

return 0;

}

你的正确 还问 浪费我时间

#include<iostream>

using namespace std;

long reverse(long number){

if(number/10 == 0)

return number;

else {

long temp = number,sum = number%10;

while(temp/10 != 0){

sum = 10;

temp /= 10;

}

return sum+reverse(number/10);

}

}

int main(){

long num = 123321;

cout<<num<<endl;

cout<<"After Reverse!"<<endl;

cout<<reverse(num)<<endl;

if(num == reverse(num))

cout<<"Palindrome Number!"<<endl;

else cout<<"Not A Palindrome Number!"<<endl;

system("pause");

return 0;

}

回文数判断C++递归版本,VS2008下调试通过

int numpal(int x)

int a,n=0,temp;

temp=x;

a=x;

while(a!=0) 

{  

    n+=a%10; 

    a/=10;  

    n=10;  

}  

if(temp==n/10) 

   return 1;

else 

   return 0 ; 

}

#include<stdioh>

#include<stringh>

main()

{

char a[100];

int i=0,n;

int facto(char a[],int n);

gets(a);

n=strlen(a);

if(facto(a,n)!=0)

printf("Yes\n");

else

printf("No\n");

}

int facto(char a[],int n)

{

int i=0;

i= strlen(a);

if(n==(i+1)/2) return 1;

else if(a[i-n]==a[n-1])

{

facto(a,n-1);

}

else return 0;

}

帮你改正了一下!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13492261.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存