zoukankan      html  css  js  c++  java
  • 字符串过滤,排序输出数字的问题

    /*
    题目:
    写一个排序程序
    输入字符串: "5 34 7 34 6 2 12 3 4, 52 ; 13"
    输出字符串: "2 3 4 5 6 7 12 13 34 34 52"
    */
    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <vector>
    #include <sstream>
    using namespace std;
    
    int str2num(string s)    //字符串转化为数字的函数(好方法)
    {
        int num;
        stringstream ss(s);
        ss >> num;
        return num;
    }
    
    int main()
    {
        string str;
        string dealedstr;
        vector<string> vecStr;
        vector<int> vecInt;
    //获取输入一行字符串 看到网上写的while(getline(cin, str)),这是为了可以重复运行 getline(cin, str);
    for (int i = 0; i < str.size(); i++) { if (!((str[i] >= '0') && (str[i] <= '9'))) { str[i] = ' '; //并不存在''这样的字符 } }
    str.push_back(
    ' '); //为了方便处理最后一个数字(nice) //确定数字子字符串的起止位置. int posBegin = 0; int posEnd = 0; bool boolBegin = false; for (int i = 0; i < str.size();) { if ((str[i] >= '0') && (str[i] <= '9')) { posBegin = i; boolBegin = true; } posEnd = str.find(" ", i); //find(查找字符,查找起点),它不受for循环的影响,直接从位置i开始,返回目标字符首次出现的位置 if ((posEnd > posBegin) && (boolBegin)) //使得posBegin指向新的数字时,vecStr才会进行将其收录进去 { vecStr.push_back(str.substr(posBegin, posEnd - posBegin)); //substr(起始位置,长度) i = posEnd + 1; //i直接跳到posEnd的后一位,避免多位数字时posBegin逐位移动,取到数字的中间位置而出错 } else i++; //不符合条件时,也要进行自增,否则会进入死循环 boolBegin = false; } for (int i = 0; i < vecStr.size(); i++) { vecInt.push_back(str2num(vecStr[i])); } sort(vecInt.begin(),vecInt.end());  //vector的sort函数用法 for (int i = 0; i < vecInt.size(); i++) { cout << vecInt[i] << " "; } cout << endl; system("pause"); return 0; }
    新战场:https://blog.csdn.net/Stephen___Qin
  • 相关阅读:
    .net core 学习小结之 配置介绍(config)以及热更新
    .net core 学习小结之环境配置篇
    powershell下载网站图片
    Powershell 脚本输出前十条消耗内存的进程到excel
    Linux 自学shell
    使用bat脚本进行开机启动批处理
    Git 创建分支并合并主分支
    Git 的使用及其一些基本用法
    点击按钮复制文本到剪切板
    关于一些基本排序的实现
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/9425144.html
Copyright © 2011-2022 走看看