3. 入門並實踐STL——string篇
string
- how to use?
#include<string>
using namespace std;
-
string的定義
- string str;
- 初始化,string str = "abc";
-
string的輸入與輸出
- 簡單方法:使用cin與cout
- 使用scanf與printf:如何使用scanf讀取string
-
string中內容的訪問
- 通過下標:
str[1]
- 通過迭代器訪問
- 一般使用第一種即可滿足訪問要求,但是有些函式比如
insert()
和erase()
要求以迭代器為引數 string::iterator it = str.begin();
- 一般使用第一種即可滿足訪問要求,但是有些函式比如
- string和vector一樣,支援直接對迭代器進行加減某個數字,如
str.begin() + 3
的寫法是可行的。
- 通過下標:
-
常用函式解析
operator+=: 將兩個string直接拼接起來
-
compare operator: 用於比較大小,比較規則是字典序
- ==
- !=
- <
- <=
- >
- >=
size()
與length()
: 存放的字元數,O(1)-
insert()
, O(n)-
insert(pos, string)
: 在pos位置插入字串string。例:str.insert(1, "xy"); // 在str[1]處插入,str變成axybc
-
insert(it, it2, it3);
: it為原字串插入的位置,it2和it3為需插入字串的首尾地址。
-
-
erase()
- 刪除單個元素:
str.erase(it);
- 刪除一個區間內的所有元素:
str.erase(first, last)
, 刪除[first, end) - 時間複雜度都為O(n)
- 刪除單個元素:
clear()
, O(1)substr()
:subtr(pos, len);
返回從pos號開始,長度為len的字串,O(len)string::npos
: 值為-1,用以作為find
函式失配時的返回值。-
find()
:-
str.find(str1);
,當str1時str的字串時,返回str中第一次出現的位置,如果str2不是str的字串則返回string::npos -
str.find(str1, pos)
; 從pos號位開始匹配str2 - 時間複雜度:O(nm), n和m為兩個字串的長度。
-
-
replace()
str.replace(pos, len, str2);
-
str.replace(it1, it2, str2);
: 把[it1, it2)範圍的字串替換成str2 - 時間複雜度:O(str.length())
習題
- 解析
- 數字的形態可分為
- 0.abc...
- abcd(...).qwe
- 剔除前導0,查詢'.'的位置,記錄指數的大小,刪除".",第一個非零位的0全部刪除(小數)
- 整理後的字串,長度不夠補長度,長度夠了進行截斷。
- 數字的形態可分為
#include<iostream>
#include<string>
using namespace std;
int N;
string deal(string str, int& e) {
while(str.length() > 0 && str[0] == '0') {
str.erase(str.begin());
}
// str is less than 1
if(str[0] == '.') {
str.erase(str.begin());
while(str.length() > 0 && str[0] == '0') {
str.erase(str.begin());
e--;
}
}
//str is larger than 1
else {
// to find '.'
int k = 0;
while(k < str.length() && str[k] != '.') {
k++;
e++;
}
// it means we find '.', then we delete it.
if(k != str.length()) {
str.erase(str.begin() + k);
}
}
int len = str.length();
if(len == 0) e = 0;
while(len++ < N) {
str += "0";
}
str = str.substr(0, N);
return str;
}
int main() {
scanf("%d", &N);
// the input is too large, so we can't use integer to store them.
//
string a, b;
cin >> a >> b;
int e1 = 0;
int e2 = 0;
a = deal(a, e1);
b = deal(b, e2);
if(a == b && e1 == e2) {
printf("YES 0.%s*10^%d\n", a.c_str(), e1);
}
else {
printf("NO 0.%s*10^%d 0.%s*10^%d\n", a.c_str(), e1, b.c_str(), e2);
}
system("pause");
return 0;
}
相關文章
- STL_string容器
- Pytorch DistributedDataParallel(DDP)教程二:快速入門實踐篇PyTorchParallel
- webpack的入門實踐,看這篇就夠了Web
- Docker入門實踐Docker
- BoltDB 入門實踐
- MQ 入門實踐MQ
- Springboot快速入門篇,圖文並茂Spring Boot
- 3. Spring 的入門程式Spring
- redux 入門到實踐Redux
- Kafka 入門與實踐Kafka
- TypeScript入門與實踐TypeScript
- GitHub Actions 入門實踐Github
- Docker入門實踐(三)Docker
- Docker入門實踐(四)Docker
- Nginx入門實踐(二)Nginx
- Docker 入門與實踐Docker
- locsut 入門與實踐
- NGINX 入門到企業級應用實踐-基礎篇Nginx
- 太極1:STL:vector和string
- C++STL學習第一篇(什麼是STL以及string的各種功能用法)C++
- Android入門(五):實踐技巧Android
- GitOps快速入門與實踐Git
- RPC協議實踐入門RPC協議
- GraphQL 從入門到實踐
- Nacos入門學習&實踐
- Mybatis-Plus入門實踐MyBatis
- Python:Excel自動化實踐入門篇 甲【留言點贊領圖書門票】PythonExcel
- Redis in .NET Core 入門:(2) StringRedis
- stl__使用篇
- STL使用篇__vector
- STL使用篇__list
- STL使用篇__deque
- STL使用篇__map
- STL使用篇__set
- STL使用篇__multimap
- STL使用篇__multiset
- STL使用篇__容器
- STL使用篇__bitset