一、字符串最后一个单词长度
题目解析:由题输入一段字符串或一句话找最后一个单词的长度,也就是找最后一个空格后的单词长度。1.既然有空格那用我们常规的cin就不行了,我们这里使用getline,2.读取空格既然是最后一个空格后的单词,那我们这里就用rfind直接从尾向前找空格,找到一个空格直接就能判断了,显示是字符符合我们预期。
getline格式
(1) istream& getline (istream& is, string& str, char delim);
(2) istream& getline (istream& is, string& str);
rfind格式
string (1) size_t rfind (const string& str, size_t pos = npos) const;
c-string (2) size_t rfind (const char* s, size_t pos = npos) const
buffer (3) size_t rfind (const char* s, size_t pos, size_t n) const;
character (4) size_t rfind (char c, size_t pos = npos) const;
#include <iostream>
#include<string>
using namespace std;
int main()
{
string str;
getline(cin,str);
size_t pos = str.rfind(' ');
if(pos!=str.size()) //如果第一个空格位置没有越界
cout << str.size()-(pos+1) << endl;
else //如果只有一个字符串返回该字符串长度
cout<<str.size() << endl;
return 0;
}
二、字符串相加
题目解析:由题使两个字符串相加,要求不能使用库和不能转为整数,1.用我们常见列竖式先从个数开始相加,可能大于10可能小于10这里存在进位的可能,2.获取两字符串的最后一个字符,依次相加,3.考虑结果是个位数和结果是0的情况最后逆置;
class Solution {
public:
string addStrings(string num1, string num2) {
int end1=num1.size()-1; //数组下标
int end2=num2.size()-1;
int carry=0;
string strRet;
while(end1>=0||end2>=0)
{
int val1=end1>=0?num1[end1]-'0':0; //这里拿到的是字符须转成数字
int val2=end2>=0?num2[end2]-'0':0;
int ret = val1+val2+carry;
carry = ret / 10; //更新carry
ret %= 10; //拿出个位数
strRet+=(ret+'0');
end1--; //自减1
end2--;
}
if(carry==1)
strRet +='1';
reverse(strRet.begin(),strRet.end()); //逆置
return strRet;
}
};