C++基础: string(3)
文章目录
- 1. 两道题目
- 1. [387. 字符串中的第一个唯一字符 - 力扣(LeetCode)](https://leetcode.cn/problems/first-unique-character-in-a-string/description/)
- 2.[415. 字符串相加 - 力扣(LeetCode)](https://leetcode.cn/problems/add-strings/)
- 2. string增删查改相关接口
- 3.string相关题目
- 1.[字符串最后一个单词的长度_牛客题霸_牛客网](https://www.nowcoder.com/practice/8c949ea5f36f422594b306a2300315da?tpId=37&&tqId=21224&rp=5&ru=/activity/oj&qru=/ta/huawei/question-ranking)
1. 两道题目
1. 387. 字符串中的第一个唯一字符 - 力扣(LeetCode)
这道题可以直接进行比较,但是时间复杂度就比较高了
例如:
class Solution {
public:int firstUniqChar(string s) {int r = s.size();for (int i = 0; i < r; i++) {bool isUnique = true;for (int j = 0; j < r; j++) {if (i!= j && s[i] == s[j]) {isUnique = false;break;}}if (isUnique) {return i;}}return -1;}
};
我们这里可以用和计数排序一样的方法就可以解决
class Solution {public:int firstUniqChar(string s) {// 统计每个字符出现的次数int count[256] = {0};int size = s.size();for(int i = 0; i < size; ++i)count[s[i]] += 1;// 按照字符次序从前往后找只出现一次的字符for(int i = 0; i < size; ++i)if(1 == count[s[i]])return i;return -1;}};
2.415. 字符串相加 - 力扣(LeetCode)
to_string
可以将其他类型转换为字符串
就和我们进行加减计算时候,从后向前进行计算
class Solution {
public:string addStrings(string num1, string num2) {int end1 = num1.size() - 1, end2 = num2.size() - 1;string str;int next = 0;while (end1 >= 0 || end2 >= 0) {int val1 = end1 >= 0 ? num1[end1] - '0' : 0;int val2 = end2 >= 0 ? num2[end2] - '0' : 0;end1--, end2--;// 如果走完了就将其补上0 ,否则就将其转换为数字int ret = val1 + val2 + next;next = ret / 10;ret %= 10;str.insert(str.begin(), '0' + ret);}if (next == 1) {str.insert(str.begin(), '1');}return str;}
};
2. string增删查改相关接口
string::push_back
用来插入字符string::append
用来插入字符串
当然也可以用+=
来实现一样的效果:
-
string::insert
任意位置插入字符串 -
string::erease
可以将任意位置的字符进行删除
尾部删除可以用迭代器版本,也可以间接删除:
string::replace
替换字符串中的字符
string::find
查找字符串string::rfind
从后向前进行查找
如果找到了就返回下标
没有找到返回的值是string::npos
string::strsub
可以将输入的第一个参数后面的内容进行拷贝,知道这个字符串的结束
string::find_first_of
返回要找输入的字符串中的所有字符(默认第一个数据为开始位置,第二个数据为结束位置,如果不输入就直接到结尾)
- 我们在写window是要加两个’ \ ',因为一个在C语言中表示的是转义字符
string::find_last_of
和first_of相反从后向前进行查找
使用方法如下:
3.string相关题目
1.字符串最后一个单词的长度_牛客题霸_牛客网
题目不难,但有个点需要注意:
#include <iostream>
#include <string>
using namespace std;int findLastword(string str) {size_t pos = str.rfind(" ");return str.size() - (pos + 1);
}int main() {string str;//cin>>str; 不能直接用cin,因为cin遇到空格就不再接受了,直接终止了getline(cin,str); //getline第三个参数可以调成你想停止的符号,如果不输入就默认换行才停止cout << findLastword(str) << endl;
}