一、getline()
1、从屏幕读入,切分,不会跳出while。会一直等待输入,换行无效
string s;
while(getline(cin, s)) { // 默认按空格切分
cout << s << endl;
}
string s;
while(getline(cin, s, '.')) { // 按'.'切分
cout << s << endl;
}
string s;
while(getline(cin, s, ' .')) { // 按 空格 和 '.' 切分
cout << s << endl;
}
2、从屏幕读入一行,切分,会跳出while。
string s;
getline(cin, s);
stringstream sscin(s);
while(getline(sscin, s)) { // 默认按空格切分
cout << s << endl;
}
string s;
getline(cin, s);
stringstream sscin(s);
while(getline(sscin, s, '.')) { // 按'.'切分
cout << s << endl;
}
string s;
getline(cin, s);
stringstream sscin(s);
while(getline(sscin, s, ' .')) { // 按 空格 和 '.' 切分
cout << s << endl;
}
二、版本比较
版本: x.x.x.x,返回最小版本。
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <climits>
#include <algorithm>
using namespace std;
/*
输入
3, 4.3.5.4, 2.10.3, 2.4
最小版本
2.4
*/
int main()
{
vector<int> minver(4, INT_MAX); //最小版本号初始化
int len = 0; //最小版本号长度 0<=len<=4
//将cin读到另一个流scin中,否则while跳不出去
string s;
getline(cin, s);
stringstream scin(s);
//版本号比较
while(getline(scin, s, ',')) { //按版本号切分
//cout << "#" << s << "#" << endl;
vector<int> temp(4, 0);
int k = 0;
stringstream sv(s);
while(getline(sv, s, '.')) { //按数字切分
//cout << "@" << s << "@" << endl;
stringstream sn(s);
int x;
sn >> x;
temp[k++] = x;
//cout << "&" << x << "&" << endl;
}
for(int i=0; i<4; i++) { //比较
if(temp[i] < minver[i]) {
minver = temp;
len = k;
break;
}
}
}
//输出最小版本号
for(int i=0; i<len-1; i++)
{
cout << minver[i] << '.';
}
cout << minver[len-1];
getchar();
return 0;
}