gpt4 book ai didi

通过“回文字算法”复习C++语言

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 26 4
gpt4 key购买 nike

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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com