【C++】STL容器——string类的例题应用(9)

简介: 【C++】STL容器——string类的例题应用(9)

【例1]给一个字符串(包含字母与数字),将字符串翻转【访问string的size与对象】

  • 如给定“123asd222zxc”,反转后得到“123cxz222dsa”
class Solution {
public:
   bool isLetter(char ch)
   {
   if(ch >= 'a' && ch <= 'z')
   return true;
   if(ch >= 'A' && ch <= 'Z')
   return true;
   return false;
   }
   string reverseOnlyLetters(string S) 
   {
   if(S.empty())
   return S;
  size_t begin = 0, end = S.size()-1;
   while(begin < end)
   {
     while(begin < end && !isLetter(S[begin]))
     ++begin;
     while(begin < end && !isLetter(S[end]))
     --end;
     swap(S[begin], S[end]);
     ++begin;
     --end;
   }
   return S;
   }
}

【例2]验证一个字符串是否是回文【范围for遍历字符串】

class Solution {
public:
   bool isLetterOrNumber(char ch)//是否是字母
  {
   return (ch >= '0' && ch <= '9')
   || (ch >= 'a' && ch <= 'z')
   || (ch >= 'A' && ch <= 'Z');
   }
   bool isPalindrome(string s) 
   {
     for(auto& ch : s)//范围for,遍历字符串
     {
     if(ch >= 'a' && ch <= 'z')// 先小写字母转换成大写,再进行判断
     ch -= 32;
     }
   int begin = 0, end = s.size()-1;
   while(begin < end)
    {
       while(begin < end && !isLetterOrNumber(s[begin]))
       ++begin;
       while(begin < end && !isLetterOrNumber(s[end]))
       --end;
       if(s[begin] != s[end])
       {
          return false;
       }
        else
       {
         ++begin;
         --end;
       }
    }
   return true;
    }
};

【例3]找字符串中第一个只出现一次的字符【计数】

class Solution {
public:
   int firstUniqChar(string s)
  {
   // 统计每个字符出现的次数
   int count[256] = {0};
   int size = s.size();
   for(int i = 0; i < size; ++i)
   count[s[i]] += 1;
   // 按照字符次序从前往后找只出现一次的字符
   for(int i = 0; i < size; ++i)
   if(1 == count[s[i]])
   return i;
   return -1;
   }
};

【例4]输入一个字符串,求字符串里面最后一个单词的长度【getline函数的应用】

  • getline函数有两种不同的形式,这也就对应着字符串的 结束方式
  • getline函数原型:getline(std::cin,string ch),表示以换行符 ‘\n’ 结束字符串的读入
  • getline函数原型 getline(std::cin,string s,char ch),表示以字符ch来结束字符串的读入
  • 功能: 无视空格,读取输入屏幕的字符串
#include<iostream>
#include<string>
using namespace std;
int main()
{
 string line;
 // 不要使用cin>>line,因为会它遇到空格就结束了
 // while(cin>>line)
 while(getline(cin, line))
 {
 size_t pos = line.rfind(' ');
 cout<<line.size()-pos-1<<endl;
 }
 return 0;
}

【例5】将两个字符串相加(ASCALL码相加)【reverse函数,+=,insert】

  • 题目如下所示:
  1. 两个字符串相加的规定是,ASCALL码值相加
  2. 开始前,我们要清楚明白,该题目需要遍历两个字符串
  3. 有两种思路: 从前往后相加,+=尾插以后再reverse过来(代码片所用方法) 或者从后往前相加,相加的结果到字符串可以使用insert头插
  4. 我们先考虑分别遍历一位的情况,后面要采用while循环
  5. (1)遍历字符串的同时,分别取数,将字符的ASCALL通过-“0”,转换成整型
  6. (2)取数完的同时分别相加,考虑进位
  7. (3)最后再+“0”,重新转换成字符,形成字符串
class Solution {
public:
 string addstrings(string num1, string num2)
{
 int end1 = num1.size()-1;
 int end2 = num2.size()-1;
 int value1 = 0, value2 = 0, next = 0;//核心设置:
 string addret;//形成的新串存放在其中
 while(end1 >= 0 || end2 >= 0)
 {
   if(end1 >= 0)
   value1 = num1[end1--]-'0';
   else
   value1 = 0;
   if(end2 >= 0)
   value2 = num2[end2--]-'0';
   else
   value2 = 0;
  int valueret = value1 + value2 + next;//next为进位,value1,value2为单次循环中分别的取数
  if(valueret > 9)
  {
  next = 1;
  valueret -= 10;
  }
  else
  {
  next = 0;
  }
 //addret.insert(addret.begin(), valueret+'0');
 addret += (valueret+'0');
 }
 // 从后往前相加,相加的结果到字符串可以使用insert头插
 // 或者+=尾插以后再reverse过来
 if(next == 1)
 {
 //addret.insert(addret.begin(), '1');
 addret += '1';
 }
 reverse(addret.begin(), addret.end());
 return addret;
 }
};


相关文章
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1438 108
|
12月前
|
运维 监控 数据可视化
小白也能部署应用,3个免费的容器化部署工具测评
本文对比了三款容器化部署工具:Docker Compose、Portainer 和 Websoft9。Docker Compose 适合开发者编排多容器应用,Portainer 提供图形化管理界面,而 Websoft9 则面向中小企业和非技术人员,提供一键部署与全流程运维支持,真正实现“开箱即用”。三款工具各有定位,Websoft9 更贴近大众用户需求。
小白也能部署应用,3个免费的容器化部署工具测评
|
10月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
861 52
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
716 59
|
缓存 Java Docker
如何对应用代码进行优化以提高在Docker容器中的性能?
如何对应用代码进行优化以提高在Docker容器中的性能?
529 1
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
874 57
|
10月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
968 6