1. 程式人生 > >C/C++常用的字串操作

C/C++常用的字串操作

1、字串轉整形  

int atoi(const char *str );

注意:輸入是 C風格的字元陣列,如果 是C++ string型別,輸入可以呼叫 str.c_str()輸入C風格字串;

          如果輸入中不全為數字型別字元,則轉換會在第一個不是數字型別的字元處停止。

例如:

string str = "181.484";
int x = atoi(str.c_str());

上述例子中,x等於181;

2、取子字串

string str = "giregjniuer";
string sub1 = str.substr(1); //取str的1號下標到最後位置為子串
string sub1 = str.substr(0,5); //取str的0號下標開始後的5個字元為子串

3、從字串中查詢字串

(1)size_t find (const string& str, size_t pos = 0) const;  //查詢物件--string類物件

(2)size_t find (const char* s, size_t pos = 0) const; //查詢物件--字串

(3)size_t find (const char* s, size_t pos, size_t n) const;  //查詢物件--字串的前n個字元

(4)size_t find (char c, size_t pos = 0) const;  //查詢物件--字元

結果:找到 -- 返回 第一個字元的索引

     沒找到--返回   string::npos

	string str = "qau ni ma b";
	int id1 = str.find("ni");
	int id2 = str.find("a",id1); // 從id1位置往後找,找到的下標是相對於整個字串而不是id1開始
	int id3 = str.find("ni m",0,2); //第三個引數,表示要查詢的字串(第一個引數)的前幾個字元

4、切割字串

切割字串可以通過find和substr來實現,也可以通過下面函式實現。

char* strtok (char* str,constchar* delimiters );

函式功能:    切割字串,將str切分成一個個子串 函式引數:    str:在第一次被呼叫的時間str是傳入需要被切割字串的首地址;在後面呼叫的時間傳入NULL。    delimiters:表示切割字串(字串中每個字元都會 當作分割符)。 函式返回值:    當s中的字元查詢到末尾時,返回NULL;    如果查不到delimiter所標示的字元,則返回當前strtok的字串的指標。

char buf[]="[email protected]@[email protected]@heima";
    char*temp = strtok(buf,"@");
    while(temp)
    {
        printf("%s ",temp);
        temp = strtok(NULL,"@");
    }

5、替換字串

替換(replace)

語法:

  basic_string &replace( size_type index, size_type num, const basic_string &str );
  basic_string &replace( size_type index1, size_type num1, const basic_string &str, size_type index2,
  size_type num2 );
  basic_string &replace( size_type index, size_type num, const char *str );
  basic_string &replace( size_type index, size_type num1, const char *str, size_type num2 );
  basic_string &replace( size_type index, size_type num1, size_type num2, char ch );
  basic_string &replace( iterator start, iterator end, const basic_string &str );
  basic_string &replace( iterator start, iterator end, const char *str );
  basic_string &replace( iterator start, iterator end, const char *str, size_type num );
  basic_string &replace( iterator start, iterator end, size_type num, char ch );

replace()函式:

  • 用str中的num個字元替換本字串中的字元,從index開始
  • 用str中的num2個字元(從index2開始)替換本字串中的字元,從index1開始,最多num1個字元
  • 用str中的num個字元(從index開始)替換本字串中的字元
  • 用str中的num2個字元(從index2開始)替換本字串中的字元,從index1開始,num1個字元
  • 用num2個ch字元替換本字串中的字元,從index開始
  • 用str中的字元替換本字串中的字元,迭代器start和end指示範圍
  • 用str中的num個字元替換本字串中的內容,迭代器start和end指示範圍,
  • 用num個ch字元替換本字串中的內容,迭代器start和end指示範圍.

例如,以下程式碼顯示字串"They say he carved it himself...find your soul-mate, Homer."

    string s = "They say he carved it himself...from a BIGGER spoon";
    string s2 = "find your soul-mate, Homer.";

    s.replace( 32, s2.length(), s2 );