题解|美团——寻找数字

迷宫问题

http://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

alt alt

解析:

可以用两个指针,遍历字符串。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;
	}
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务