1.最后一词
题目描述:
给定一个可能由任意数量的字母和空格组成的字符串序列,序列中每个只包含字母,不包含任何空格的子序列称为一个单词,请输入一个序列中最后一个单词的长度。
示例:
输入:carep diem
输出:4
方案1:对于cin读取时,遇到空格、回车、tab会结束读取,因此可使用该性质,直接对数据进行读取,然后最后一个读取的就是最后一个单词。
#include <iostream>
#include <string>
using namespace std;
int main(){
string str;
while(cin>>str);
return str.length();
}
方案2:getline()接受一个字符串,可以接收空格并输出。从字符串最后开始向前判断,遇到空格则停止;要考虑到只输入一个单词无空格的情况也就是最终i==0。
#include <iostream> #include <string> using namespace std;
int getLastLength(string str){ int count = 0; if(!str.empty()){ int i = str.size()-1; while(i>= 0 && str[i] != ' '){ count++; i--; } if(i==0){ //考虑到输入为“Hole”这种情况 count = str.size(); }
} return count; } int main(){ string str; getline(cin,str); int result = getLastLength(str); cout<<result<<endl; return 0; } |
参考链接:
C++中getline()、get()等函数的用法
https://blog.youkuaiyun.com/JIEJINQUANIL/article/details/50802902
最后一词的解析:
https://www.nowcoder.com/questionTerminal/9eeeb5d680094dfca66251b958ecdcce
2.比大更大
题目描述:给定一列非负整数,求这些数连接起来能组成的最大的数。
输入描述:
第一行n>0 是一个正整数,表示一共有n个输入,以后每行是一个非负整数,共有n行。
输出描述:
n个输入的非负整数连接成的最大的数。
示例1:
输入:
6
9
8
7
65
4
3
输出:
9876543
示例2:
输入:
2
11
2
输出:
211
方案:由题意可知,返回结果可能非常大,因此需要返回一个字符串而不是整数。
因此,将读取的数据也保存为string,比较的是两字符a和b连接的两种方案a+b和b+a,最终结果则是将比较完成的数据连接输出即可。
注意:全为0的情况。
eg:示例2中a为11,b为2,则看做字符串,a+b为112,b+a为211,显然b+a> a+b.
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(string& a,string& b){
return (a+b) > (b+a);
}
int main(){
int n;
cin >> n;
vector<string> str(n,"");
for (int i =0;i<n;i++){
cin >> str[i];
}
sort(str.begin(), str.end(), cmp);
string res;
// for (auto c : str){
// res += c;
// }
for(int i=0;i<n;i++){
res += str[i];
}
if(res[0] == '0'){
cout<<0<<endl;
}
else{
cout << res <<endl;
}
return 0;
}
参考链接:
https://www.nowcoder.com/questionTerminal/8712c1e04b914d19a7e5e195c8c04fbb?f=discussion