当前位置: 首页 > news >正文

专门做盗文网站的公司市政二级总承包资质承包范围

专门做盗文网站的公司,市政二级总承包资质承包范围,网站死链怎么解决,有的域名怎样做网站目录 一、字符串最后一个单词的长度 题目描述 完整代码 二、验证回文串 题目描述 完整代码 三、反转字符串 题目描述 完整代码 四、反转字符串中的单词 题目描述 完整代码 一、字符串最后一个单词的长度 原题链接 题目描述 计算字符串最后一个单词的长度&#xff…

目录

一、字符串最后一个单词的长度

题目描述

完整代码

二、验证回文串

题目描述

完整代码

三、反转字符串

题目描述

完整代码

四、反转字符串中的单词

题目描述

完整代码


一、字符串最后一个单词的长度

原题链接

题目描述

计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)

输入描述:

输入一行,代表要计算的字符串,非空,长度小于5000。

输出描述:

输出一个整数,表示输入字符串最后一个单词的长度。

        按照题目要求,我们需要找到字符串中的最后一个单词,我的想法是从字符串的最后一个字符开始向前遍历,直到遇到空格为止,那么怎么实现遍历呢,我们可以用迭代器指向最后一个字符,这里用到一个string的成员函数 rbegin() 它的作用是创建一个指向字符串最后一个字符的反向迭代器,我们创建一个 it 变量用于接受迭代器的内容。

        由于声明一个迭代器类型比较麻烦,因为类型名字通常比较长,所以可以用到auto关键字对 it 进行定义:auto it = input::rbegin() 。此时对it进行 * 解引用就可以获取当前指向的字符,这样就可以实现对字符的判空,迭代器it++则指向它之前的字符。了解了这些,我们就可以做题了。

        不过还有一个问题,题目要求的并不是接口实现,需要我们自行存储输入样例,但是用cin输入字符串时,编译器遇到空格就停止,也就是说怎么存储一个带有多个空格的字符串成了问题。这里可以用C++标准库的getline函数,用于从输入流(例如std::cin)中读取一行文本。下面是它的标准用法:

std::getline(input_stream, str, delimiter);

完整代码

#include <iostream>
#include<string>
using namespace std;int main() {string input;getline(cin, input);int answer = 0;for (auto it = input.rbegin(); *it != ' '; it++) {answer++;if (answer >= input.size()) {cout << input.size();return 0;}}cout << answer << endl;
}

二、验证回文串

原题链接

题目描述

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 

示例 1:

输入: s = "A man, a plan, a canal: Panama"
输出:true
解释:"amanaplanacanalpanama" 是回文串。

示例 2:

输入:s = "race a car"
输出:false
解释:"raceacar" 不是回文串。

示例 3:

输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 "" 。
由于空字符串正着反着读都一样,所以是回文串。

        按题目要求,我们需要对字符串从前往后以及从后往前分别遍历,判断两次遍历内容是否相同,观察实例可以发现,字符无关大小写,所以我们需要统一字符的大小写,这里统一成小写,这里用到C++标准库函数 tolower,用于将字符串转化成小写形式。其原型如下:

int tolower(int c);

        该函数接受一个整数参数 c,该参数代表一个字符。如果该字符是大写字母,则 tolower 返回相应的小写字母的ASCII码值;否则,它原样返回。再通过基于范围的for循环来对字符串每个字符进行遍历并对其进行修改。

        大小写的问题解决了,但是字符串还要再进行进一步的处理,根据例题,回文串是不考虑标点符号和空格的,所以,我们还需要把字符串中空格和标点的部分进行删除,只保留字母部分,下面先给出这一部分的代码:

s.erase(std::remove_if(s.begin(), s.end(), [](char c) {return std::ispunct(c) || std::isspace(c);}),s.end()
);
  1. std::remove_if: 这个函数用于对指定范围内的元素进行重新排列,使满足给定谓词条件(由 lambda 函数指定)的元素移到范围的末尾。它实际上并不删除元素,只是将它们移到末尾。

  2. Lambda 函数 [](char c) { return std::ispunct(c) || std::isspace(c); } 是一个谓词,对于是标点符号或空格字符的字符返回 true

  3. std::remove_if 的结果作为第一个参数传递给 s.erase 函数,该函数用于从字符串中擦除指定范围的元素。

经过上述步骤,字符串就处理完成了,接下来就是对字符串分别进行先序和后序遍历,通过定义两个个string对象,分别讲先序和后序的结果赋值给他们,然后进行比较。

完整代码

class Solution {
public:bool isPalindrome(string s) {for (char& x : s) { //大写转小写x = tolower(x);}s.erase(remove_if(s.begin(), s.end(), [](char c) { //删去标点符与空格符return std::ispunct(c) || std::isspace(c); }), s.end());string a1(s.begin(), s.end());string a2(s.rbegin(), s.rend());if (a1 == a2) {return 1;}return 0;}
};

三、反转字符串

原题链接

题目描述

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例 1:

输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

        根据题目要求,首先需要遍历字符串,我们用一个迭代器来实现遍历,还需要记录遍历的个数,用flag表示当遍历了2k个字符时,对前k个进行翻转,翻转的操作我们可以通过库函数 reverse 实现,每进行一次翻转操作后,将flag置0。

完整代码

class Solution {
public:string reverseStr(string s, int k) { //翻转前2k个字符的前k个字符int flag = 0;auto begin = s.begin();for (auto x = s.begin(); x != s.end(); x++) {flag++;if (flag == 2 * k) {reverse(begin, x+1-k);begin = x + 1;flag = 0;}}if (flag < k) {reverse(begin, s.end());}else {reverse(begin, begin + k);}return s;}
};

        为什么这里reverse内的参数是begin和x+1-k呢,原因是reverse内部第二个迭代器参数其实指向的是字符串最后一个元素的后一位,而x此时指向的是2k个元素中的第2k个元素,所以需要+1再-k,才能实现对前k个元素的翻转。

四、反转字符串中的单词

原题链接

题目描述

给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1:

输入:s = "Let's take LeetCode contest"
输出:"s'teL ekat edoCteeL tsetnoc"

示例 2:

输入: s = "Mr Ding"
输出:"rM gniD"

        这道题目与上一道类似,只不过翻转的范围变成了字符串中的每个单词,那么只需要通过遍历找到空格的位置,即上一道题目找到第2k个位置类似,然后进行翻转,同样需要flag来标记遍历的个数以及一个left迭代器标记遍历的起始位置。

完整代码

class Solution {
public:string reverseWords(string s) {auto left = s.begin();for (auto right = s.begin(); right != s.end(); right++){if (*right == ' ') { //碰到空格,开始翻转reverse(left, right);left = right + 1;}}reverse(left, s.end());return s;}
};

        这四道题目考验了有关迭代器,string以及部分库函数的知识点,通过这四道例题,我们可以对迭代器的运用有更深入的了解。

http://www.yayakq.cn/news/619543/

相关文章:

  • 汕头网站搭建南宁网站建设活动
  • 注册网站能赚钱吗做营销的一般逛哪些网站
  • 个人自助网站做网站在哪儿买空间
  • 搜狐网站开发wordpress重写页面样式
  • 贵阳做网站设计永久免费做网站app
  • 基于html的网站开发广州物流最新情况
  • 教务管理网站开发抖音代运营套餐价格表
  • 深圳建设网站价格做网站需要商标注册吗
  • 建设部网站水利造价师禁止 wordpress ajax
  • 北京微网站制作江苏建设电子信息网站
  • 横峰县建设局网站个人工作总结ppt模板免费
  • 泸州住房和城乡建设厅网站软硬件开发公司
  • wordpress 后台 324合肥seo建站
  • 如何刷网站访问量服务器维护网站建设教程
  • 做合法的海外购网站需要什么手续建设婚恋网站基本功能有哪些
  • 临沂网站建设选盛誉温州网站快速排名
  • 网站集群建设解决方案广州网站建设电话大全
  • 提升网站权重吗从WordPress源码恢复
  • 北京网站建设设计公司哪家好网站建设宗旨是什么
  • 简单大气网站陕西高速公路建设网站
  • 广东建网站工具类网站做排名
  • 公司做网站 微信平台活动营销
  • 取消网站的通知书网站优化策略分析
  • 交互 网站家装公司文案
  • 淘宝客网站域名备案吗乱码网站怎么办
  • 淘宝客户自己做网站怎么做室内设计平面图手绘
  • 网站建设实验总结报告网站不同颜色
  • 关于水果的网站开发在线培训系统平台
  • 嘉兴市住房和城乡建设局门户网站校园网站建设管理
  • 西安哪家做网站公司好太原seo排名优化软件