1. 程式人生 > >string主要操作函數

string主要操作函數

風格 末尾 情況 int start 兩個 first c++ mil 轉義

參考博客:http://blog.csdn.net/zhenyusoso/article/details/7286456

std::string illegal(" \t\f\v\n\r\\/") 表示對其illegal字符串進行賦值。依次是空格,水平制表,換頁,垂直制表,回車,左斜杠。

1.匹配查找字符,字符串,例如:在字符串中查找單個字符c。

函數find_first_of(): 查找在字符串中第1個出現的字符c,而函數find_last_of()查找最後一個出現的c。匹配的位置是返回值。如果沒有匹配發生,則函數返回-1.

int find_first_of(char c, int start = 0):查找字符串中第1個出現的c,由位置start開始。如果有匹配,則返回匹配位置;否則,返回-1.默認情況下,start為0,函數搜索整個字符串。

int find_last_of(char c):查找字符串中最後一個出現的c。有匹配,則返回匹配位置;否則返回-1.該搜索在字符末尾查找匹配,所以沒有提供起始位置。

int find_last_not_of(string):從後向前查找不在string對象中的字符 從後向前在string對象中查找第一個不在str, s或c中的字符,返回它的位置。當指定pos時,只查找pos或pos之前的內容,忽略pos之後的內容。

2.字符串中提取連續字符串

string substr(int start=0,int count= -1); 從起始位置開始復制字符串中的count 個字符,並返回這些字符作為子串。 如果字符串尾部小於count字符或者count 為-1,則字符串尾停止復制。 如果不使用參數調用只包括位置start,則substr()返回從位置開始到字符串尾部的子串。

3.添加和刪除字符串

字符連接(+、+=)是在字符串尾添加字符串。insert()函數擴展了這個能力,允許在任意位置添加字符串。為了從字符串。為了從字符串中刪除字符串,函數erase()可以從指定的位置開始刪除字符。

void insert(int statr,const string& s):將子串s放入字符串中,起始於位置start。插入操作增加了原始字符串的長度。
void erase(int start=0,int count=-1):從start開始,從字符串中刪除count個字符。如果現有的字符串少於count個字符,或者count為-1,則刪除到字符串尾部的所有字符。

4.c_str()返回c語言風格字符串的地址

將字符串對象轉換為C語言風格字符串。
// open 要求文件名是c語言風格的字符串
string filename = "input.dat";
fin.open(filename.c_str());

5.分離字符串路徑的方法

提取目標文件的完整路徑中的文件路徑、文件名,修改擴展名等方法。

主要思想:

1.輸入文件名,用函數find_last_of()在字符串中搜索最後一個出現的"/"。這個字符確定了路徑的結尾和文件名的開始。

2.路徑是由最後一個"/"前所有字符串組成的子串。文件名是最後一個"/"後的所有字符。使用最後一個"/"的位置和substr()提取出路徑和文件名。

3.擴展名是文件名中最好一個"."後的字符串。調用find_last_of()搜索最後一個匹配,則復制文件名,刪除當前擴展名,並添加新的擴展名"exe"。 輸出產生的可執行文件名。

#include "stdafx.h"
#include<iostream>
#include<string>

using namespace std;

int main()
{
string pathname, path, filename,executableFile;

// ‘/’和 ‘.‘的位置
int backslashIndex, dotIndex;
cout << "Enter the path name: ";
cin >> pathname;

// 識別最後一個‘/‘的位置。註意:由於
// 轉義碼如‘/n‘以/起始,
// c++ 使用‘//‘表示 /

backslashIndex = pathname.find_last_of(‘//‘);

//路徑名是最後一個‘/‘之前的字符
path = pathname.substr(0,backslashIndex);

cout << "path: " << path << endl;

// 路徑名尾部是文件名
filename = pathname.substr(backslashIndex+1,-1);
cout << "Filename: " << filename << endl;

// 查看文件名是否有‘.cpp‘擴展名。
// 首先找到最後一個‘.‘的位置。 如果
// 沒有‘.‘,則dotIndex為-1
dotIndex = filename.find_last_of(‘.‘);
//測試是否有‘.‘,其余的字符是否為"cpp"
if (dotIndex != -1 && filename.substr(dotIndex+1) == "cpp")
{
// 刪除"cpp",並加上"exe"設置可執行字符串
executableFile = filename;
executableFile.erase(dotIndex+1,3);
executableFile+="exe";
cout << "Executable: " << executableFile << endl;
}

return 0;
}

6.安全函數strcpy_s,strcat_s

strcat_s脫胎於strcat,用於兩個字符串的鏈接,strcat(str1,str2)直接返回新的str1.但在vs2005後,為了安全起見,重新添加了些功能和api和以前不同。比如strcat_s.

為什麽是安全起見呢?對於老的你添加str2的時候如果st1溢出怎麽辦?所以新的strcat_s規定,有三個參數,必須指定str1的大小。其實不指定也可以
char string[20]="123";
strcat_s(string,sizeof(string),"456");
printf("%s",string);這樣20個元素,足夠裝下123456了。

strcpy_s函數脫胎於strcpy,用法與上同,三個參數,兩個參數都可以。

string主要操作函數