HWOJ 字符串的排序
来源:互联网 发布:lol免费改名软件 编辑:程序博客网 时间:2024/05/09 10:12
HWOJ 字符串的排序
题目:字符串的排序
题目描述:
题目分析:
①因为题目不分大小写,所以我们考虑用#include<cytpe.h>的toupper来转化成大写字母
注意tolower是把大写转化为小写
②之后非英文字母的不变,所以我们要有一个循环,当!isalpha时,直接循环加1,这里特别需要注意如果循环加1之后必须要小于len哦
③关键在于第二点比较难,因为我们常规思路,外循环为i,0-len-1 内循环为j:i+1 - len-1
这样我们发现不对。
举例说明:
BabA -> aBbA -> aBbA -> aAbB 这样我们可以知道bB位置不对
所以我们该怎么考虑呢?
例如我们每下就比较初位置和后一位的位置呢?
例如:
BabA -> aBbA -> aBbA -> aBAb ->再次循环 ->aBAb -> aABb这样就满足条件了
由上述分析,我们可以知道
我们其实需要一个最外循环i,还需要一个内循环j,还需要一个k=j+1 去比较,那么我们就要思考i与j的关系呢?实际上,就是再次循环一次,但是我们不能由把j定义和i一样,否则就不是双循环了,这里我们可以知道j = len - 1 - i刚好可以全部倒过来循环一次。
========================================================================
参考代码:
//字符排序.cpp//2014.7.8#include <iostream>#include <string>#include <ctype.h>using namespace std;string sort_string(string str){ char temp; int i,j,k = 0; for(i = 0; i < str.size(); i++) { for(j = 0; j < str.size() - 1 - i; j++) { k = j + 1; while(k < str.size() && !isalpha(str[k])) k++; if(k < str.size() && toupper(str[j]) > toupper(str[k])) { temp = str[j]; str[j] = str[k]; str[k] = temp; } } } return str;}int main(){ string s; getline(cin,s); cout << sort_string(s) << endl; return 0;}
调试犯错误地方:
①注意区分头文件#include<ctype.h>和#include<string> c++中string不用加h,但是ctype必须要加上.h
②C++string中带空格输入的字符串我们不能写成getline(s),我们要写成getline(cin,s)
③注意要区分子函数中int char string 和void 如果没有返回值,我们可以用void,但是到主函数的时候,我们直接把sort_string(string str);cout << s << endl;
或者像上面代码这样来写,切记别乱用。
④这里特别要注意k < str.size(),否则我们就会报错。
⑤当字符串题目中不分大小写时,我们常常采用toupper或者tolower转化,记得加上头文件#include<ctype.h>
⑥记住这里需要注意一个越界问题,
我们需要都加上k<str.size(),而且写在前面,以后我们防止越界问题时候,我们写这个应该写在&&前面。
- HWOJ 字符串的排序
- 【HWOJ】字符串最后一个单词的长度
- 每天学习一点编程(15)(HWOJ字符串排序)
- HWOJ 删除字符串中出现次数最少的字符
- HWOJ 删除字符串中重复出现的字符
- HWOJ-字符串运用-密码截取
- HWOJ 名字的漂亮度
- HWOJ 计算字符的个数
- HWOJ 计算字符串最后一个单词长度
- HWOJ 计算字符串最后一个单词长度
- HWOJ 字符串最后一个单词长度
- HWOJ 杨辉三角的变形
- HWOJ 实现一个听高级的字符匹配算法
- HWOJ 查找组成一个偶数最接近的两个素数
- HWOJ 查找输入整数二进制中1的个数
- HWOJ数字
- HWOJ 合唱队
- HWOJ 1988
- unity 3d 视频
- “jquery中each方法和选择器”的学习笔记
- Add Binary
- UVa 10340(子序列)
- Longest Palindromic Substring
- HWOJ 字符串的排序
- 6-0. 混合类型数据格式化输入(5)
- TLD(Tracking-Learning-Detection)学习与源码理解之(四)
- 设计模式之三种工厂模式
- 黑马程序员_Java正则表达式
- 安卓中进程的概念
- LeetCode刷题笔录Search a 2D Matrix
- String转换DateTime与数据库
- Android开发之InstanceState详解