JAVA练习题,编写一程序输出一个字符串中的所有回文串,求大神解答~

如果类似AA、ABA形式的字符串称为回文串,编写一程序输出一个字符串中的所有回文串。字符串从键盘输入。... 如果类似AA、ABA形式的字符串称为回文串,编写一程序输出一个字符串中的所有回文串。字符串从键盘输入。 展开
 我来答
DeathWolf96
2014-03-22 · TA获得超过153个赞
知道答主
回答量:51
采纳率:0%
帮助的人:61.3万
展开全部
基本思路:1、递归。字符串掐头去尾然后再进行下一级判断。这样会有重复,并且计算复杂度是指数级增长。 2、简单循环。从2->[字符串长度]的字符串逐个获得判断。
这里就用第二种方法了~~

#include <iostream>
#include <cstdio>
#include <cstring>

void outputString(char*, int);
char* partString(char*, int, int);
char* revString(char*, int);
bool isReversible(char*, int);
bool strEqual(char*, char*, int);

int main() {
using namespace std;
char* str;
cout << "Confirm the length of the string : ";
int len = 0;
cin >> len;
if(len <= 0) return 0;
cout << endl << "The string please =O= : ";
str = new char[len + 1];
cin.get();
cin.getline(str, len);
cout << endl << "The String : " << str;
cout << endl << "Now outputting ... " << endl;
outputString(str, strlen(str));
cout << endl << "Done, press any key to quit..." << endl;
system("pause");
}

void outputString(char* str, int len) {
for(int i = 2; i < len - 1; i++) {
for(int j = 0; j < len - i; j++) {
char* str2 = partString(str, j, i);
if(isReversible(str2, i))
std::cout << str2 << std::endl;
delete[] str2;
}
}
}

char* partString(char* str, int index, int len) {
char* str2 = new char[len + 1];
for(int i = index; i < index + len; i++)
str2[i - index] = str[i];
str2[len] = '\0';
return str2;
}

bool isReversible(char* str, int len) { //确认一个字符串是否是回文串。
char *str1, *str2;
if(len % 2 == 0) {
str1 = partString(str, 0, len/2);
str2 = revString(partString(str, len/2, len/2), len/2);
} else {
str1 = partString(str, 0, len/2);
str2 = revString(partString(str, len/2 + 1, len/2), len/2);
}
bool b = strEqual(str1, str2, len/2);
delete[] str1, str2;
return b;
}

char* revString(char* str, int len) { //返回一个前后颠倒的字符串。
char* str2 = new char[len + 1];
for(int i = 0; i < len; i++) {
str2[len - i - 1] = str[i];
}
str2[len] = '\0';
return str2;
}

bool strEqual(char* str1, char* str2, int len) { //确认两个字符串是否相等。
for(int i = 0; i < len; i++)
if(str1[i] != str2[i]) return false;
return true;
}

表示要改写成java难度应该不大 咱写的那么认真还测试编译通过了就采纳了吧~QwQ
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式