问题标题: 酷町堂:预习

0
0

0
已采纳
郑金顺
郑金顺
中级光能
中级光能

字符串加密课后讲义(v2)

字符串加密课后讲义

 

一、课堂内容

  1. 字符串常用函数需要熟练掌握。
    s.substr(pos,len); //从下标pos位置开始截取len长度的字符子串
    s.erase(pos,len); //从下标pos位置开始删除len长度的字符串
    s.insert(pos,str); 从下标pos位置插入字符串str
    s.replace(pos,len,str); 将下标pos位置开始的len长度的字符串替换为字符串str
    s.find(str,pos); 从字符串s的下标pos位置开始查找字符串str,返回找到的字符串位置(首字符下标),找不到则返回-1。

  2. 对于字符串进行处理的时候,总是会遍历字符串,需要时刻注意处理过程中改变了原字符串,要遍历的字符的下标是否变化。
     

二、课堂练习详解

 
1095 名词复数形式

分析: 根据题意分成三种情况处理。第一种情况:以s、z、x、ch、sh结尾的词,直接加es。可以使用截取子串函数substr()将字符串的后两位或者最后一位截取出来进行判断比较。
第二种情况:以y结尾的名词,将y改变为i,再加es。也可以将最后一位字符截取判断是否y,如果是y,则可以使用替换函数replace将y替换为ies。
第三种情况:另外所有的情况,直接添加s。

 

#include <iostream> #include <string> using namespace std; int main(){ string s; cin>>s; //1、凡是以s、z、x、ch、sh结尾的词,在该词末尾加上后辍es构成复数; if(s.substr(s.size()-1,1)=="s" || s.substr(s.size()-1,1)=="z" || s.substr(s.size()-1,1)=="x" || s.substr(s.size()-2,2)=="ch" || s.substr(s.size()-2,2)=="sh" ) s+="es"; //2、以y结尾的名词,将y改变为i,再加es; else if(s.substr(s.size()-1,1)=="y" ){ s.replace(s.size()-1,1,"ies"); } //3、除以上情况以外的都直接加s。 else s+="s"; cout<<s; return 0; }

 

2831 字符串压缩

分析: 我们可以遍历字符串,计数重复字符的长度,当遍历到的字符和上一个字符不同时,则输出上一个字符和它的连续长度,并且从当前字符重新计数。
为了输出最后一段连续压缩字符,可以在字符串的末尾加上一个空格(或其他非小写字母字符),当遍历到这个字符时,判断遇上一个字符不同,即可输出最后一段压缩字符。

 

#include <iostream> using namespace std; int main(){ string s; cin>>s; s+=' '; //在字符串尾部加上空格,用于后面循环中的判断,输出最后一段压缩字符 int cnt=1; //cnt:统计连续重复字符的个数 for(int i=1;i<=s.size()-1;i++){ if(s[i]==s[i-1]) //如果当前字符和上一个字符相同,则计数+1 cnt++; else{ //否则输出上一个字符及它的个数(1不输出),并且重新计数 cout<<s[i-1]; if(cnt>1) cout<<cnt; cnt=1; } } return 0; }

 

2830 字符格式转换

分析: 可以遍历字符串,如果遍历到下划线字符则判断:下一个字符是否小写字母,是就把它转大写,然后删除这个下划线(注意,不管后一个字符是否小写字母,都要删除下划线)。
但是需要强调的一点是,删除操作会使得当前字符消失,后面的字符补上空缺,导致我们要遍历的下一个字符下标还应该是i,所以删除之后要i–,使得下一个遍历的下标还是i。

 

#include <iostream> #include <string> using namespace std; int main() { string s; cin >> s; for(int i=0; i<s.size(); i++) { if(s[i]=='_') { //当前字符是下划线 if(s[i+1]!='_') //下一个字符不是下划线,即是小写字母 s[i+1]-=32; //下一个字符变大写 s.erase(i,1); //删除当前下划线 i--; //因为删除操作会使当前字符消失,由下一个字符补上,所以我们要遍历的下一个字符下标还是i,所以要让i-1 } } cout << s; return 0; }

0
张恩泽
张恩泽
高级天翼
高级天翼

你明天可能会上回文字符串,不要不信

我要回答