运用双链表实现字符串的拆分,去重,检测回文
来源:互联网 发布:kdj优化背离源码 编辑:程序博客网 时间:2024/06/03 20:33
输入一串字符,可以是字母,数字与符号,空格也包含在内,以问号结束(结束标志可以自行设定),实现将字符串中的字母,数字和其他
字符分开,并输出字母串的去重后的结果,最后一行为数字串的回文判断,是为1,不是回文为0.
以下是源代码,在VS2013中测试可用:
#include<iostream>
#include<string>
using namespace std;
class list
{
char Data;
public:
void Input_Data(char s)
{
Data = s;
}
char Output_Data()
{
return Data;
}
list *next;
list *prior;
};
#include<string>
using namespace std;
class list
{
char Data;
public:
void Input_Data(char s)
{
Data = s;
}
char Output_Data()
{
return Data;
}
list *next;
list *prior;
};
void build(list * &List, list * &s)
{
list *p;
p = List;
if (List == NULL)
{
List = s;
return;
}
while (p)
{
if (p->next == NULL)
{
p->next = s;
s->prior = p;
return;
}
p = p->next;
}
cout << "Wrong !" << endl;
}
{
list *p;
p = List;
if (List == NULL)
{
List = s;
return;
}
while (p)
{
if (p->next == NULL)
{
p->next = s;
s->prior = p;
return;
}
p = p->next;
}
cout << "Wrong !" << endl;
}
void check(list * &List)
{
list *p;
list *q;
p = List;
while (p)
{
q = p->next;
while (q)
{
if (q->Output_Data() == p->Output_Data())
{
list *k;
k = q;
q = q->prior;
if (k->next == NULL)
{
k->prior->next = NULL;
}
else
{
k->prior->next = k->next;
k->next->prior = k->prior;
}
delete k;
k = NULL;
}
q = q->next;
}
p = p->next;
}
}
{
list *p;
list *q;
p = List;
while (p)
{
q = p->next;
while (q)
{
if (q->Output_Data() == p->Output_Data())
{
list *k;
k = q;
q = q->prior;
if (k->next == NULL)
{
k->prior->next = NULL;
}
else
{
k->prior->next = k->next;
k->next->prior = k->prior;
}
delete k;
k = NULL;
}
q = q->next;
}
p = p->next;
}
}
void classify(list * &List_A,list * &List_B,list * &List_C)
{
list *p;
p = List_A;
while (p)
{
if ((p->Output_Data() >= 65 && p->Output_Data() <= 90) || (p->Output_Data() >= 97 && p->Output_Data() <= 122))
{
list *q = NULL;
q = p;
if (q == List_A)
{
List_A = q->next;
p = q->next;
q->next->prior = NULL;
q->next = NULL;
q->prior = NULL;
}
else if (q->next == NULL)
{
q->prior->next = NULL;
p = q->prior;
q->next = NULL;
q->prior = NULL;
}
else
{
q->prior->next = q->next;
q->next->prior = q->prior;
p = q->prior;
q->next = NULL;
q->prior = NULL;
}
build(List_B,q);
if (p == List_A)
continue;
}
else if (p->Output_Data() >= 48 && p->Output_Data() <= 57)
{
}
else
{
list *q = NULL;
q = p;
if (q == List_A)
{
List_A = q->next;
p = q->next;
q->next->prior = NULL;
q->next = NULL;
q->prior = NULL;
}
else if (q->next == NULL)
{
q->prior->next = NULL;
p = q->prior;
q->next = NULL;
q->prior = NULL;
}
else
{
q->prior->next = q->next;
q->next->prior = q->prior;
p = q->prior;
q->next = NULL;
q->prior = NULL;
}
build(List_C, q);
if (p == List_A)
continue;
}
p = p->next;
}
return;
}
{
list *p;
p = List_A;
while (p)
{
if ((p->Output_Data() >= 65 && p->Output_Data() <= 90) || (p->Output_Data() >= 97 && p->Output_Data() <= 122))
{
list *q = NULL;
q = p;
if (q == List_A)
{
List_A = q->next;
p = q->next;
q->next->prior = NULL;
q->next = NULL;
q->prior = NULL;
}
else if (q->next == NULL)
{
q->prior->next = NULL;
p = q->prior;
q->next = NULL;
q->prior = NULL;
}
else
{
q->prior->next = q->next;
q->next->prior = q->prior;
p = q->prior;
q->next = NULL;
q->prior = NULL;
}
build(List_B,q);
if (p == List_A)
continue;
}
else if (p->Output_Data() >= 48 && p->Output_Data() <= 57)
{
}
else
{
list *q = NULL;
q = p;
if (q == List_A)
{
List_A = q->next;
p = q->next;
q->next->prior = NULL;
q->next = NULL;
q->prior = NULL;
}
else if (q->next == NULL)
{
q->prior->next = NULL;
p = q->prior;
q->next = NULL;
q->prior = NULL;
}
else
{
q->prior->next = q->next;
q->next->prior = q->prior;
p = q->prior;
q->next = NULL;
q->prior = NULL;
}
build(List_C, q);
if (p == List_A)
continue;
}
p = p->next;
}
return;
}
bool Check_repeat(list * &List)
{
list *p;
p = List;
list *q;
while (p->next != NULL)
{
p = p->next;
}
q = p;
p = List;
while (p && q)
{
if ( p->Output_Data() != q->Output_Data() )
{
return 0;
}
p = p->next;
q = q->prior;
}
return 1;
}
{
list *p;
p = List;
list *q;
while (p->next != NULL)
{
p = p->next;
}
q = p;
p = List;
while (p && q)
{
if ( p->Output_Data() != q->Output_Data() )
{
return 0;
}
p = p->next;
q = q->prior;
}
return 1;
}
int main()
{
list *List_A = NULL;
char input;
while (cin.get(input))
{
if (input == '?')
{
break;
}
list *s;
s = new list();
s->next = NULL;
s->prior = NULL;
s->Input_Data(input);
build(List_A,s);
}
list *List_B = NULL;
list *List_C = NULL;
{
list *List_A = NULL;
char input;
while (cin.get(input))
{
if (input == '?')
{
break;
}
list *s;
s = new list();
s->next = NULL;
s->prior = NULL;
s->Input_Data(input);
build(List_A,s);
}
list *List_B = NULL;
list *List_C = NULL;
classify(List_A,List_B,List_C);
list *p;
p = List_A;
if (List_A == NULL)
{
cout << "-1";
}
else
while (p)
{
cout << p->Output_Data();
p = p->next;
}
cout << endl;
p = List_B;
if (List_B == NULL)
{
cout << "-1";
}
else
while (p)
{
cout << p->Output_Data();
p = p->next;
}
cout << endl;
p = List_C;
if (List_C == NULL)
{
cout << "-1";
}
else
while (p)
{
cout << p->Output_Data();
p = p->next;
}
cout << endl;
check(List_B);
p = List_B;
if (List_B == NULL)
{
cout << "-1";
}
else
while (p)
{
cout << p->Output_Data();
p = p->next;
}
cout << endl;
if (List_A != NULL)
{
cout << Check_repeat(List_A) << endl;
}
else cout << "-1" << endl;
}
if (List_C == NULL)
{
cout << "-1";
}
else
while (p)
{
cout << p->Output_Data();
p = p->next;
}
cout << endl;
check(List_B);
p = List_B;
if (List_B == NULL)
{
cout << "-1";
}
else
while (p)
{
cout << p->Output_Data();
p = p->next;
}
cout << endl;
if (List_A != NULL)
{
cout << Check_repeat(List_A) << endl;
}
else cout << "-1" << endl;
}
输出第一行为数字串,第二行为字母串(去重前),第三行为其他字符,第四行为去重后的字母串,最后一行为数字串是否是回文的判断
0 0
- 运用双链表实现字符串的拆分,去重,检测回文
- 字符串相邻去重的实现
- shell脚本实现检测回文字符串
- 检测是否为回文字符串 C++实现
- Shell脚本中实现字符串变量的去重功能
- 字符串去重C语言实现
- 正则表达式巧妙实现字符串去重
- list字符串去重的三种方式 list去重 字符串去重
- 检测回文字符串
- 回文字符串检测
- 去重数组中相同的字符串
- SQL Server2005 拆分-去重-合并
- linux文件合并、去重、拆分
- linux文件合并、去重、拆分
- 字符串去重
- 字符串去重
- java 字符串去重
- js 字符串去重
- sqlite 创建 询问
- 只能输入数字的TextBox控件
- NOIP2014提高组初赛
- Vertex Cover
- leetcode26
- 运用双链表实现字符串的拆分,去重,检测回文
- C# 读取保存App.config配置文件
- php常用函数汇总
- 小杨同学git使用记(适合使用过git但是不熟练的童鞋)
- mysql远程连接 Host * is not allowed to connect to this MySQL server
- linux文件处理命令
- Python教程
- 探索 ConcurrentHashMap 高并发性的实现机制
- Android:Layout_weight的深刻理解