一、字符串最后一个单词长度
题目解析:由题输入一段字符串或一句话找最后一个单词的长度,也就是找最后一个空格后的单词长度。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; //更新carryret %= 10; //拿出个位数strRet+=(ret+'0');end1--; //自减1end2--;}if(carry==1)strRet +='1';reverse(strRet.begin(),strRet.end()); //逆置return strRet;}
};