题解|美团——寻找数字
迷宫问题
http://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
解析:
可以用两个指针,遍历字符串。i和j分别定位数字的开头和结尾,然后将中间的内容传到中间字符串中,最后将一个完整的数字转成int类型。这里一个考点就是如何把string类型转换成int。 我们采用atoi(str.c_str())来实现这个功能。 转换成数字还可以***tream来实现
#include <sstream>
int main()
{
string s;
stringstream sstream;
int num;
sstream << s;
sstream >> num;
//但是这里有个问题,num被传入内容后,下一次传入的时候值会变错
}
还有一个难点:即从小到大输出,这里我们使用的解决方法是,先把结果数据存入vector中,再利用sort()函数去实现排序,如果想实现从大到小排序则如下:
#include <algorithm>
#include <vector>
bool cmp(int a,int b){
return a>b;//如果是从小到大的话就是 a<b 但是sort函数默认从小到大排序所以第三个参数可以不用写
}
int main(){
vector<int> v;
/*
给v存数据
```````
*/
sort(v.begin(),v.end(),cmp);//到这里容器v里的内容就完成了排序
}
代码:
int main() {
string s,sr = "";
int result;
stringstream sstream;
getline(cin, s);
vector<int> v;
for (int i = 0; i < s.size(); i++) {
if (s[i] < 97 || s[i]>122) {
sr = sr + s[i];
for (int j = i + 1; j < s.size(); j++) {
if (s[j] < 97 || s[j]>122) {
sr = sr + s[j];
if (j == s.size() - 1)i = j;
}
else {
i = j;
break;
}
}
result = atoi(sr.c_str());
v.push_back(result);
sr = "";
}
}
sort(v.begin(), v.end());
for (int i = 0; i < v.size(); i++) {
cout << v[i] << endl;
}
}