茶叶网站程序,合肥网站建设认准 晨飞网络,房产网络平台,做甜点的网站主播今天脑子不好用#xff0c;先写两题吧~
题目引用 反转字符串中的单词右旋字符串
1.反转字符串 给你一个字符串 s #xff0c;请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且…主播今天脑子不好用先写两题吧~
题目引用 反转字符串中的单词右旋字符串
1.反转字符串 给你一个字符串 s 请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中单词间应当仅用单个空格分隔且不包含任何额外的空格。
示例 1 输入s “the sky is blue” 输出“blue is sky the” 示例 2 输入s hello world 输出“world hello” 解释反转后的字符串中不能存在前导空格和尾随空格。 示例 3 输入s “a good example” 输出“example good a” 解释如果两个单词间有多余的空格反转后的字符串需要将单词间的空格减少到仅有一个。 我们来看一下题目要求我们将一个英文句子的每个单词都反转且单词内字母顺序为正序。首先我们可以将反转函数写出来反转时使用因为反转过后末尾的空格可能会占据句首所以我们要写一个removespace函数出来使其将所有多余的空格去掉。 怎么去掉呢又是双指针。这里的步骤其实和昨天的最后一题替换数字挺像的我们定义一个slow指向修改时字符串的位置然后进入循环当s[i]! 时判断slow是否为0如果为0直接将i位置的数赋值给slows[slow]s[i]如果不为0说明不是第一个单词了需要加上一个空格再赋值。 最后就是将两个函数整合起来先将多余的空格去掉再将整个字符串reverse最后按每个单词的区间来反转回正序。 来看代码:
void reverse(string s,int start,int end){for(int istart,jend;ij;i,j--){swap(s[i],s[j]);}}void removespace(string s){int slow0;for(int i0;is.size();i){if(s[i]! ){if(slow!0) s[slow] ;while(is.size()s[i]! ) s[slow]s[i];}}s.resize(slow);}string reverseWords(string s) {removespace(s);reverse(s,0,s.size()-1);int start0;for(int i0;is.size();i){if(is.size()||s[i] ){reverse(s,start,i-1);starti1;}}return s;}2.右转字符串 题目描述 字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k请编写一个函数将字符串中的后面 k 个字符移到字符串的前面实现字符串的右旋转操作。
例如对于输入字符串 “abcdefg” 和整数 2函数应该将其转换为 “fgabcde”。
输入描述 输入共包含两行第一行为一个正整数 k代表右旋转的位数。第二行为字符串 s代表需要旋转的字符串。 输出描述 输出共一行为进行了右旋转操作后的字符串。 输入示例 2 abcdefg 输出示例 fgabcde 这题说实话是奖励题我们按照给的数字确定反转区间先将整个字符串反转再将0-nn-end的位置分别反转就行了 直接看代码吧
#includeiostream
#includealgorithm
using namespace std;
int main() {int n;string s;cin n;cin s;int len s.size(); //获取长度reverse(s.begin(), s.end()); // 整体反转reverse(s.begin(), s.begin() n); // 先反转前一段长度nreverse(s.begin() n, s.end()); // 再反转后一段cout s endl;} 总结 今天的题目比较简单但其实很多细节需要掌握例如第一题的去除多余空格的那一步… 明天见~