1. 程式人生 > >字符串過濾,排序輸出數字的問題

字符串過濾,排序輸出數字的問題

color 轉化 sstream ngs 輸出字符串 進行 col 問題 輸出

/*
題目:
寫一個排序程序
輸入字符串: "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; }

字符串過濾,排序輸出數字的問題