C++ String的使用


STL提供了處理字符串的string類型,可滿足對字符串的一般應用。 string類型支
持可變長度的字符串,C++標準庫負責管理和存儲相關內存,並提供各種接口。 string類
型支持大多數順序容器的操作,因此也可以認爲是字符容器,但它不支持以棧的方式操作
容器,因此在string中不能使用front、back和pop_back操作。

1. string類型的初始化

要使用string類型,必須包含相關頭文件:
#include

string標準庫支持多個構造函數,因此初始化string對象的方式有多種:
strings1; //定義串s1,s1爲空串
strings2(s1); //用s1初始化s2
strings3(″abcdefg″); //用字符串″abcdefg″初始化s3
strings4(s3,2); //用s3的前兩個字符構成的字符串初始化s4,即s4=″ab″
strings5(s3.begin(),s3.begin()+2); //s5=″ab″
strings6(s3,2,3); //s6爲s3的第個字符(起始爲)開始連續個字符構成的字
符串″cde″
strings7(5,'x'); //將s7初始化爲個字符'x'的副本,即s7=″xxxxx

2. string對象的基本操作

操作接口示例 (s1、s2均爲string對象) 說明
s1=s2 將s2的副本賦值給s1
s1.empty() 如果s1爲空串,返回true,否則返回false
s1.size() 返回s1中字符的個數
s1[n] 返回s1中位置爲n的字符,位置從0開始計
==,!=,<,<=,>,>= 關係運算符保持原有的含義
s1+=s2或s1=s1+s2 將s2表示的串追加到s1的後面形成新串
s1.insert(pos,s2) 在下標爲pos的元素前插入s2表示的串
s1.insert(pos,cp,len) 在下標爲pos的元素前插入cp所指串的前n個字符 insert操作還有很多用法,在這裏不再一一列舉
s1.c_str() 返回s1表示的串的首地址
s1.substr(pos, n) 返回一個string類型的字符串,包含s1中從下標pos開始連續n個字符
s1.append(s2) 將s2表示的串追加到s1的後面形成新串
s1.append(cp) 將字符指針cp指向的串追加到s1的後面形成新串
s1.replace(pos,len,s2) 刪除s1中從下標pos開始的len個字符,並用s2替換之
s1.find(s2, pos) 從s1下標爲pos的位置開始查找s2,找到後返回s2第一次出現的位置,若沒找 到,返回值string::npos
s1.rfind(s2, pos) 從s1下標爲pos的位置開始查找s2,找到後返回s2最後一次出現的位置,若沒 找到,返回值string::npos
s1.find_first_of(s2,pos) 從s1下標爲pos的位置開始查找s2中的任意字符,找到後返回第一次出現的 位置
s1.find_last_of(s2,pos) 從s1下標爲pos的位置開始查找s2中的任意字符,找到後返回最後一次出現 的位

來自《數據結構與STL(徐雅靜、肖波編著)(第2版)》

3.字符串與字符數組

//(1)複製到字符串數組中
char* cp = newchar [s1.size()+1];
strcpy(cp ,(char*) s1.c_str ()) ; //cp =″abkxyzcxyz1234


//(2)string --> char *
   string str("OK");
   char * p = str.c_str();

//(3)char * -->string
   char *p = "OK";
   string str(p);

4.字符串與數字之間的轉換

http://c.biancheng.net/view/1527.html

https://www.cnblogs.com/dingxiaoqiang/p/7678477.html

利用stringstream

#include <iostream>
#include <String>
#include<sstream>

using namespace std;

int main()
{
	/* 字符串轉數字*/
    string a = "123.32";
    double res;
    stringstream ss;
    ss << a;
    ss >> res;

    cout << res << endl;

    /* 數字轉字符串*/
    double a = 123.32;
    string res;
    stringstream ss;         // 定義流ss
    ss << a;                 //將數字a轉化成流ss
    ss >> res;               //將流ss轉化成字符串
    return 0;

	return 0;
}

to_string

to_string(T value) 函數來將 T 類型的數字值轉換爲字符串形式:

string to_string(int value)
string to_string(long value)
string to_string(double value)
#include <String>
#include <iostream>
using namespace std;

int a = 5;
string str = to_string(a*a);
cout << " The square of 5 is " << str << endl;

5. Vs2017 使用 strcpy 報錯

提示 strcpy 是不安全的,需要用 strcpy_s 代替

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char str1[11] = "hello";
    char str2[12] = "world";
    char str3[11];
    int len;


    //複製str1到str2
    strcpy_s(str3, str1);
    cout << "strcpy(str3, str1):" << str3 << endl;

    return 0;
}

6.字符串遍歷

  string s1 = "abcdefg";

    //1.通過數組方式遍歷  
    for (int i = 0; i < s1.length(); i++)  
    {  
        cout << s1[i] << " ";  
    }  

    //2.通過迭代器遍歷  
    for(string::iterator it = s1.begin(); it!= s1.end(); it++)  
    {  
        cout << *it << " ";  
    }  
  
    //3.通過at()方式遍歷  
    for (int i = 0; i < s1.length(); i++)  
    {  
        cout << s1.at(i) << " ";        //此方式可以在越界時拋出異常  
    }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章