国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

邢臺有什么網(wǎng)站營銷推廣的平臺

邢臺有什么網(wǎng)站,營銷推廣的平臺,建歌網(wǎng)站多少錢,唐山網(wǎng)站制作企業(yè)提醒: 本片博客只是小編的聽課筆記&#xff0c;介意勿看。 基礎(chǔ) 包含在頭文件<string>&#xff0c;才能使用string類似函數(shù)接口。 string常見構(gòu)造類 string s1; cin>>s1;//無參構(gòu)造 string s2(s1);//拷貝構(gòu)造 string s1("jfksa");//傳參構(gòu)造 三種…

提醒:

本片博客只是小編的聽課筆記,介意勿看。

基礎(chǔ)

包含在頭文件<string>,才能使用string類似函數(shù)接口。

string常見構(gòu)造類

string s1; 
cin>>s1;//無參構(gòu)造
string s2(s1);//拷貝構(gòu)造
string s1("jfksa");//傳參構(gòu)造

三種遍歷方式

//三種遍歷方式
//s.begin()返回第一個字符
//s.end();返回最后一個字符的下一個位置(\0位置)
//一operator【】
for (int i = 0; i < s2.size(); i++) {cout << s2[i];
}
cout << endl;
//二.迭代器iterator
string::iterator it = s2.begin();//it類似于指針,但本質(zhì)可能和是運算符重載
while (it != s2.end()) {cout << *it;//*it類似于解引用。本質(zhì)也像是運算符重載it++;
}
cout << endl;
//三。范圍for進行遍歷
//范圍for進行遍歷
string s3("llpphh");
for (auto ch : s3) {cout << ch << " ";
}
cout << endl;

迭代器和范圍for的去區(qū)別

兩則底層邏輯相同,但是對于迭代器來講可以在迭代器中修改變量值(因為底層類似指針可以直接修改對應(yīng)地址的·1值),而對于范圍for來講,(auto ch: s2)相當于是一個拷貝,修改ch的值并不能修改實參的值,所以需要用引用(auto& ch: s2)才能修改變量的值。

auto

使用價值:方便類型推導

string::ioterator it=    //變量名太長
auto it =    ;  //簡化

typeid(變量名).name()//判斷變量類型

string迭代器

iterator //正向const_iterator //constreverse_iterator //反向const_reverse_iterator //const 反向

對應(yīng)案列如下

string s4("hello world");
//正向
string::iterator it1 = s4.begin();
while (it1 != s4.end()) {cout << *it1;it1++;
}
cout << endl;
//反向迭代器
string::reverse_iterator rit = s4.rbegin();
while (rit != s4.rend()) {cout << *rit;rit++;
}
cout << endl;
const string s5("hello world");
//const迭代器
string::const_iterator it2 = s5.begin();
while (it2 != s5.end()) {cout << *it2;it2++;
}
cout << endl;
//const反向迭代器
string::const_reverse_iterator it3 = s5.rbegin();
while (it3 != s5.rend()) {cout << *it3;it3++;
}
cout << endl;

string 容器

size()/length()

//size獲取字符長度
string s2("lvpanhao");
cout << s2.size() << endl;//經(jīng)常用
cout << s2.length() << endl;//不具有通用性

capacity()擴容

s.reverse(n)//提前開n個空間

s.clear()//清除字符串/不清楚容量

s.push_back('x');//尾插字符
s.append("aaaaaaaa");//尾插字符串

insert/頭插

s.insert('x'/"hujkf");//可以是字符也可以是字符串

erase//指定位置刪除字符

s.erase(pos ,n)//pos位置刪除n個字符
s.erase(s.begin());//迭代器版本頭刪

replace();//替換

replace(pos,n,'%%');//pos的n個位置替換成%%

substr//構(gòu)建子串、

string s5("lvpanhao");
cout << s5.substr(2, 3) << endl;//下表為2 長度為3的子串

find//查找指定字符/指定字符串

int pos=s.find(' ');//返回找到字符的下標
//把所有空格替換為%
//替換所有空格為%
string s4("hello world I am Lihua");
int pos = s4.find(' ');
while (pos != string::npos) {s4.replace(pos, 1, "%%");pos = s4.find(' ');//每次從頭開始找替換為int pod=s.find(' ',pos);//從某個位置開始找字符
}
cout << s4 << endl;

rfind/倒著找

//利用場景
//倒著找文件后綴方法
int pos1 = s6.rfind('.');
cout << s6.substr(pos1) << endl;
string s7("test.cpp.zip");
int pos2 = s7.rfind('.');
cout << s7.substr(pos2) << endl;

ind_first_of("abcd")//查找abcd所在位置

find_last_of("abcd")//倒著找查找不是abcd的全替換

string s8("hello world i love you");
//把aeiou字符改為*
size_t pos3 = s8.find_first_of("aeiou");
while (pos3 != string::npos) {s8.replace(pos3,1,"*");pos3 = s8.find_first_of("aeiou",pos3+1);
}
cout << s8 << endl;

getline()遇到換行才終止

string s1;
getline(cin,s1,)
//自己加終止條件
getLine(cin,s1,‘*‘);//默認遇到*終止

c_str()

相當于一個字符一個字符讀取字符串,遇到,‘\0’會終止讀取。

字符串匹配

strstr算法

strstr(const char* str1,const char* str2);

str2字串/str1主串

字串str2返回str1中的第一個位置字符

優(yōu)化拷貝構(gòu)造(賦值重載)

傳統(tǒng)拷貝構(gòu)造(賦值重載)

//拷貝構(gòu)造
string& string(const string& s1){//必須先自己申請空間_str=new char[n];strcpy(_str,s1._str);_size=s1.size;_capacity=s1._capacity;
}
//賦值重載
string& string(const string& s1){//必須先自己申請空間delete[] _str;_str=new char[n];strcpy(_str,s1._str);_size=s1.size;_capacity=s1._capacity;
}

現(xiàn)代拷貝構(gòu)造

//利用交換函數(shù)
string& string(const string& s1){
? ? string tem(s1);
? ? (this)->swap(tem);
}

最簡單拷貝構(gòu)造/賦值重載

string& string(string s1){//s1是局部變量直接進行交換swap(s1);//this->swap(s1);
}

寫時拷貝

對于拷貝構(gòu)造,對自定義類型完成神拷貝,淺拷貝(一個字節(jié)一個字節(jié)拷貝)并不能滿足,原因如下

1.析構(gòu)兩次

2.修改內(nèi)容時修改兩個指針指向的內(nèi)容

對于寫時拷貝只試用滿足原因1,并不能滿足條件2(自己進行擴容規(guī)深拷貝)

string類模擬實現(xiàn)

string.h
#pragma once
#include<iostream>
#include<assert.h>
using namespace std;
namespace lph {class string {public:typedef char* iterator;重載無參函數(shù)//string()//	:_str(nullptr)//	,_size(0)//	,_capacity(0)//{}帶參數(shù)構(gòu)造//string(const char* str) {//	_size = strlen(str);//	_capacity = _size;//	_str = new char[_size + 1];//	strcpy(_str, str);//}//迭代器begin使用iterator begin() {return _str;}//end使用iterator end() {return _str + _size;}// 全缺省string(const char* str = "") {_size = strlen(str);_capacity = _size;_str = new char[_capacity + 1];strcpy(_str, str);}//輸出const char* c_str() {return _str;}//獲取size大小size_t size() {return _size;}//獲取總空間大小size_t capacity() {return _capacity;}//循環(huán)遍歷char& operator[](size_t pos) {assert(pos < _size);return _str[pos];}//拷貝構(gòu)造string(const string& s) {_str = new char[s._capacity+1];strcpy(_str, s._str);_size = s._size;_capacity = s._capacity;}//賦值重載//s1=s2string& operator=(const string& s) {delete[] _str;_str = new char[s._capacity + 1];strcpy(_str, s._str);_size = s._size;_capacity = s._capacity;return *this;}//擴容void reserve(size_t n);//三個尾插void push_back(char ch);void append(const char* str);string& operator+=(char ch);string& operator+=(const char* str);~string() {delete[] _str;_size = _capacity = 0;}//中間插入void insert(size_t pos, char ch);void insert(size_t pos, const char* str);//刪除字符void erase(size_t pos, size_t len);//查找指定字符size_t find(char ch, size_t pos = 0);//查找指定字串size_t find(const char* str, size_t pos);//從某個位置獲取多長的字符 string substr(size_t pos, size_t len);private:char* _str;size_t _size;size_t _capacity;};void test1();void test2();void test3();//比較函數(shù)實現(xiàn)bool operator<(string& s1, string& s2);bool operator<=(string& s1, string& s2);bool operator>(string& s1, string& s2);bool operator>=(string& s1, string& s2);bool operator==(string& s1, string& s2);bool operator!=( string& s1,  string& s2);}
string.cpp#define _CRT_SECURE_NO_WARNINGS 1
#include"string.h"
namespace lph {void test1() {cout << "::test1::" << endl;string s1;string s2("hello world");cout << s1.c_str() << endl;cout << s2.c_str() << endl;cout << s2.size() << endl;cout << s2.capacity() << endl;cout << s2[6] << endl;//普通遍歷for (size_t i = 0; i < s2.size(); i++) {cout << s2[i];}cout << endl;//for遍歷for (auto ch : s2) {cout << ch;}cout << endl;//迭代器遍歷string::iterator it = s2.begin();while (it != s2.end()) {cout << *it;it++;}cout << endl;cout << endl;cout << endl;cout << endl;}void test2() {cout << "::test2::" << endl;string s1("hello world");s1.push_back('x');cout << s1.c_str() << endl;s1 += 'p';cout << s1.c_str() <<endl;string s2("hello world");s2 += " lvpanhao";cout << s2.c_str() <<endl;//頭插cout << "::test::" << endl;string s3("hello world");s3.insert(5, 'x');cout << s3.c_str() <<endl;string s4("hello world");s4.insert(5, "@@@@@");cout << s4.c_str() << endl;cout << "::test::" << endl;string s5("hello world");s5.erase(5, 10);cout << s5.c_str() << endl;string s6("hello world");s6.erase(5, 3);cout << s6.c_str() << endl;}void test3() {string s1("hello world");cout << s1.find('o',0) << endl;string s2("hello lvpanhao world");string s= s2.substr(6,8);cout << s.c_str() << endl;string copy(s2);cout << copy.c_str() << endl;string s3=(copy = s);cout << s3.c_str() << endl;string s4("hello");string s5("woshi");cout << (s4 < s5) << endl;cout << (s4 == s5) << endl;cout << (s4 > s5) << endl;//拷貝構(gòu)造string s6("lvpanhao");string s7("nihao");string s8(s6);cout << s8.c_str() << endl;//賦值重載s6=s7;cout << s6.c_str() << endl;}void string::reserve(size_t n) {if (n > _capacity) {char* tem = new char[n + 1];strcpy(tem, _str);delete[] _str;_str = tem;_capacity = n;}}void string::push_back(char ch) {//擴容if (_size == _capacity) {reserve(_capacity == 0 ? 4 : 2 * _capacity);}_str[_size] = ch;_size++;_str[_size] = '\0';}string& string::operator+=(char ch) {push_back(ch);return *this;}void string::append(const char* str) {//擴容size_t len = strlen(str);if (len + _size > _capacity) {reserve(len + _size > 2 * _capacity ? len + _size : 2 * _capacity);}strcpy(_str + _size, str);_size += len;}string& string::operator+=(const char* str) {append(str);return *this;}//中間插入void string::insert(size_t pos, char ch) {if (_size == _capacity) {reserve(_capacity == 0 ? 4 : 2 * _capacity);}size_t end = _size + 1;while (end >= pos) {_str[end] = _str[end - 1];end--;}_str[pos] = ch;_size+=1;}void string::insert(size_t pos, const char* str) {assert(pos < _size);size_t len = strlen(str);if (_size + len > _capacity) {//擴容reserve(_size + len > 2 * _capacity ? _size + len : 2 * _capacity);}size_t end = _size + len;while (end >= pos + len) {_str[end] = _str[end - len];end--;}for (size_t i = 0; i < len; i++) {_str[pos++] = str[i];}_size += len;}//刪除字符void string::erase(size_t pos, size_t len) {if (len > _size - pos) {_str[pos] = '\0';_size = pos;}else {for (size_t i = pos + len; i <= _size; i++) {_str[pos++] = _str[i];}_size -= len;}}//查找指定字符size_t string::find(char ch, size_t pos) {for (size_t i = pos; i < _size; i++) {if (ch == _str[i]) {return i;}}return -1;}//查找指定字串size_t string::find(const char* str, size_t pos) {assert(pos < _size);char* ptr = strstr(_str+pos, str);if (ptr == nullptr) {return -1;}else {return ptr - _str;}}//從某個位置獲取多長的字符 string string::substr(size_t pos, size_t len) {assert(pos < _size);if (len > _size - pos) {len = _size - pos;}string sub;sub.reserve(len);for (size_t i = 0; i < len; i++) {sub += _str[pos + i];}return sub;}//比較函數(shù)實現(xiàn)bool operator<(string& s1,  string& s2) {return strcmp(s1.c_str(), s2.c_str())<0;}bool operator<=( string& s1,  string& s2) {return (s1 < s2) || (s1 == s2);}bool operator>( string& s1,string& s2) {return !(s1 <= s2);}bool operator>=(string& s1, string& s2) {return !(s1 < s2);}bool operator==(string& s1,string& s2) {return strcmp(s1.c_str(), s2.c_str()) == 0;}bool operator!=(string& s1,string& s2) {return !(s1 == s2);}//自定義插入ostream& operator<<(ostream& out, string& s) {for (auto ch : s) {out << ch;}return out;}istream& operator>>(istream& ci, string& s) {char ch;//ci >> ch;//遇到空格或換行會默認未字符串ch = ci.get();while (ch != ' ' || ch != '\0') {s += ch;//ci >> ch;ch = ci.get();}return ci;}
}
#define _CRT_SECURE_NO_WARNINGS 1
#include"string.h"int main() {lph::test1();lph::test2();lph::test3();return 0;}

http://aloenet.com.cn/news/31169.html

相關(guān)文章:

  • 武進網(wǎng)站建設(shè)價位免費投放廣告的平臺
  • 網(wǎng)絡(luò)營銷自己做網(wǎng)站百度怎么發(fā)廣告
  • 內(nèi)容企業(yè)推廣河南seo網(wǎng)站多少錢
  • wordpress chastityseo是什么工作內(nèi)容
  • 企業(yè)網(wǎng)站推廣策略百度快速提交入口
  • 手機怎么做黑網(wǎng)站互聯(lián)網(wǎng)營銷培訓班
  • 營銷網(wǎng)站建設(shè)是什么網(wǎng)站設(shè)計的流程
  • 新博念 足球網(wǎng)站開發(fā)天津疫情最新情況
  • 成都網(wǎng)站建設(shè)定制開發(fā)系統(tǒng)淘寶關(guān)鍵詞搜索量查詢工具
  • 玉溪哪有網(wǎng)站建設(shè)服務(wù)公司想要推廣頁
  • 網(wǎng)頁設(shè)計英文青島關(guān)鍵詞優(yōu)化平臺
  • 拓普網(wǎng)站建設(shè)seo點擊優(yōu)化
  • 如果你會建網(wǎng)站外貿(mào)新手怎樣用谷歌找客戶
  • 網(wǎng)站推廣適合哪種公司做明星百度指數(shù)排名
  • 網(wǎng)站標題堆砌關(guān)鍵詞國際足聯(lián)世界排名
  • 免費建立個人網(wǎng)站促銷策略的四種方式
  • 企業(yè)管理咨詢公司招聘成都自動seo
  • 廈門網(wǎng)站建設(shè)多少錢軟文編輯器
  • 廈門服裝企業(yè)網(wǎng)站推廣最新小組排名
  • 做網(wǎng)站重要標簽成都seo優(yōu)化排名推廣
  • .net網(wǎng)站開發(fā)文檔教育培訓網(wǎng)站模板
  • 國家高新技術(shù)企業(yè)證書圖片北京seo分析
  • 程序員做博彩類的網(wǎng)站犯法嗎青島網(wǎng)站建設(shè)運營推廣
  • 河北高端網(wǎng)站定制公司seo營銷優(yōu)化軟件
  • 戴爾網(wǎng)站建設(shè)成功的關(guān)鍵網(wǎng)站怎么做收錄
  • wordpress數(shù)據(jù)庫導出網(wǎng)址鏈接關(guān)鍵詞推廣優(yōu)化外包
  • 浙江溫州最新消息鄭州seo外包公司哪家好
  • 怎樣開發(fā)公司的網(wǎng)站建設(shè)寧波seo怎么推廣
  • 清潔公司百度關(guān)鍵詞在線優(yōu)化
  • 動態(tài)網(wǎng)站開發(fā)工程師—aspseo一鍵優(yōu)化