- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章通过“回文字算法”复习C++语言由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、什么是回文字 。
给定一个字符串,从前往后读和从后往前读,字符串序列不变。例如,河北省农村信用社的客服电话是“96369”,无论从后往前读,还是从前后往后读,各个字符出现的位置不变.
2、功能实现 。
(一)、给定一个字符串,判断该字符串是否是回文字.
(二)、给定一个任意字符串,判断是否可以转换为回文字,如果可以转换为回文字,给出具体的算法.
3、C++语言实现版本(JAVA语言版本后续实现) 。
(一)头文件 (BackText.h) 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
/*
* BackText.h
*
* Created on: 2016年9月30日
* Author: gaodianhua
*/
#include <string>
#include <cstring>
#include <map>
#ifndef BACKTEXT_H_
#define BACKTEXT_H_
using
namespace
std;
class
BackText {
string text;
map<
char
,
int
> mapBychar;
int
checksum;
public
:
BackText();
BackText(
char
str[]);
BackText(string text);
virtual
~BackText();
bool
isBackText();
void
print()
const
;
void
countDiffCh();
void
convert(
char
* dest);
};
#endif /* BACKTEXT_H_ */
|
(二)类的实现 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
/*
* BackText.cpp
*
* Created on: 2016年9月30日
* Author: gaodianhua
*/
#include "BackText.h"
#include <iostream>
#include <string>
#include <iterator>
#include <cstring>
#include <cstdlib>
#include <map>
using
namespace
std;
BackText::BackText() {
}
BackText::~BackText() {
this
->checksum=0;
}
BackText::BackText(
char
*str){
this
->text=str;
this
->checksum=0;
}
BackText::BackText(string str){
this
->text=str;
this
->checksum=0;
}
bool
BackText::isBackText(){
string::iterator it1,it2;
it1=text.begin();
it2=text.end()-1;
for
(;it1<=it2;it1++,it2--){
if
(*it1!=*it2)
return
false
;
}
return
true
;
}
void
BackText::print()
const
{
cout<<
this
->text<<endl;
}
void
BackText::countDiffCh(){
string::iterator it1,it2;
string temp;
temp.clear();
int
index=0;
for
(it1=text.begin();it1<text.end();it1++){
if
(
strchr
(temp.data(),*it1)==NULL ){
temp.insert(index,1,*it1);
index++;
}
}
for
( it2=temp.begin();it2<temp.end();it2++){
int
count=0;
for
(it1=text.begin();it1<text.end();it1++){
if
(*it1==*it2){
count++;
checksum++;
}
}
mapBychar.insert(pair<
char
,
int
>(*it2,count));
}
map<
char
,
int
>::iterator m;
for
(m=mapBychar.begin( );m != mapBychar.end( ); m++ )
cout <<m->first<<
" "
<<m->second<<endl;
}
void
BackText::convert(
char
* dest){
if
(isBackText()){
strcpy
(dest,text.data());
return
;
}
int
cnt=0;
map<
char
,
int
>::iterator m;
for
(m=mapBychar.begin( );m != mapBychar.end( ); m++ ){
if
(m->second%2!=0){
cnt++;
}
}
if
(cnt>1){
cout<<
"该字符串不能被转化为回文字"
<<endl;
return
;
}
cout<<
"开始转换..."
<<endl;
int
begIndex=0;
int
endIndex=checksum-1;
bool
oddflag=0;
char
oddchar;
for
(m=mapBychar.begin( );m != mapBychar.end( ); m++ ){
if
( checksum % 2 == 0 ){
for
(
int
i=0; i< m->second/2; i++ ){
dest[begIndex++]=m->first;
dest[endIndex--]=m->first;
}
}
else
{
if
(m->second % 2 == 0){
for
(
int
i=0; i< m->second/2 ; i++ ){
dest[begIndex++]=m->first;
dest[endIndex--]=m->first;
}
}
else
{
oddchar=m->first;
oddflag=
true
;
continue
;
}
}
}
if
(oddflag){
map<
char
,
int
>::iterator it;
it=mapBychar.find(oddchar);
if
(it==mapBychar.end()){
cout<<
"do not find "
<< oddchar <<endl;
return
;
}
for
(
int
i=0; i< it->second; i++ ){
dest[begIndex++]=it->first;
}
}
}
|
(三)main函数 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
/*
* main.cpp
*
* Created on: 2016年9月30日
* Author: gaodianhua
*/
#include <iostream>
#include "BackText.h"
#include <cstdlib>
#include <string>
using
namespace
std;
int
main(){
string text;
text.clear();
cout<<
"请输入字符串:"
;
cin>>text;
BackText bt=BackText(text);
bt.print();
if
( !bt.isBackText() )
cout<<
"不是回文字符串"
<<endl;
bt.countDiffCh();
char
dest[100];
memset
(dest,0x0,
sizeof
(dest));
bt.convert(dest);
cout<<dest<<endl;
return
0;
}
|
以上所述是小编给大家分享的通过“回文字算法”复习C++语言,希望对大家有所帮助! 。
原文链接:http://www.cnblogs.com/gaodianhua/p/5924983.html 。
最后此篇关于通过“回文字算法”复习C++语言的文章就讲到这里了,如果你想了解更多关于通过“回文字算法”复习C++语言的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
由于 typescript 现在支持条件类型,我决定进行一些元编程,为 VSCODE intellisense 添加更多 flavor 。但是,虽然使用 A extends B 可以轻松分离其他类型,
我有一个 php var,它在回显时将 JS 函数写入页面的源代码。该函数循环遍历 CSV,因此其中包含以下行: $str="var lines = data.split('\n');"; 目前,当回
我有以下代码: name= "a"; value="b" $.post("ajax.php", {name:value}).... 然而 ajax.php 将收到 name=b 而不是 a=b。 我如
以下情况: var myVehicle = { brand: 'Tesla' }; var isMoving = Symbol(); var currentStatus = Symbol(); myV
我正在为 Python 翻译器编写 JavaScript,“\8”和“\9”给我带来了很多问题。根据文档,像“\8”或“\9”这样的东西是非法的,因为它们不是有效的八进制转义符。 Esprima pa
我有一个简单的 LinearLayout。当我将 android:background 添加到 LinearLayout 时,TextView 不再可见。 我不明白什么?
在尝试获得某种效果时遇到困难: 我有一张图片。我想将鼠标悬停在它上面。它应该变黑并弹出一些文本。 例子^ 执行此操作最简单/最简单的设置是什么?最好只有 HTML 和 CSS 注意:该元素需要在 CS
考虑以下代码: #include void f(const char * str) { str = "java"; } void main (int argc, char * argv[])
我想在 MySQL 中插入一条具有非 ASCII Unicode 字符的记录,但我在一个不允许我轻松键入非 ASCII 字符的终端上。如何在 MySQL 的 SQL 语法中转义 Unicode 文字?
Perl脚本batchReplace.pl可以用来批量替换文件中的文字/代码。可在指定目录中查找指定类型的文件,并递归检查子目录;在输出文件时复制输入文件的目录结构。 [附件]Win32应用程序b
我知道从 flutter 应用程序共享的官方包。 https://pub.dartlang.org/packages/share 共享文本和 url 很容易,但我想共享来自服务器的图像意味着它是 UR
在 Qt 文档中,它说 qreal是一个 Typedef for double unless Qt is configured with the -qreal float option. 这基本上意味
我想让 idris 证明 testMult : mult 3 3 = 9有人居住。 不幸的是,这是键入为 mult (fromInteger 3) (fromInteger 3) = fromInte
如您所知,Apple 为 NSNumber、NSDictionary、NSArray 等类提供了 @literals,因此我们可以通过这种方式创建对象,例如 NSArray *array = @[ob
有没有办法在类型上定义公共(public)文字(C# 中的公共(public) const)?显然 let 类型中的绑定(bind)必须是私有(private)的,并且 Literal 属性不能应用于
为什么下面的语法不能识别 bool 值? 我已经将其与 Java 和 GraphQL 的语法进行了比较,但不明白为什么它不起作用。 给定以下语法,解析如下: foo = null // foo = v
当我需要一个文字来测试一个带有序列的函数时,我注意到我自己的习惯比列表更频繁地使用向量。 IE。 : (map inc [1 2 3]) 但不是: (map inc (list 1 2 3)) 虽然它
是否可以在sqlite中制作类似的东西? FOREIGN KEY(TypeCode, 'ARawValue', IdServeur) REFERENCES OTHERTABLE(TypeCode, T
在我这学期的系统软件类(class)中,我们正在学习汇编程序和其他系统软件。在阅读整个类(class)时,我遇到了LITERALS主题。 对文字和立即操作数进行了比较,发现它们之间的唯一区别是文字不被
我正在使用命令行语法编写一个 gstreamer 管道来发送视频流,并想用它发送数据。我认为可行的一种解决方案是将数据作为字幕文件发送。 我可以使用以下管道通过 rtp 多路复用视频和字幕文件: gs
我是一名优秀的程序员,十分优秀!