c/c++字符串函數是什么類型

這篇文章主要介紹c/c++字符串函數是什么類型,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

十余年的東山網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。網絡營銷推廣的優(yōu)勢是能夠根據用戶設備顯示端的尺寸不同,自動調整東山建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)公司從事“東山網站設計”,“東山網站推廣”以來,每個客戶項目都認真落實執(zhí)行。

字符串函數之間的轉換,首先要先了解C++字符串的組成,C++提供了兩種字符串的表示:C 風格的字符串和標準 C++引入的 string 類類型。

1. C 風格字符串

C 風格的字符串起源于 C 語言 并在 C++中繼續(xù)得到支持。字符串被存儲在一個字符數組中 一般通過一個 char*類型的指針來操縱它 。

標準 C 庫為操縱 C 風格的字符串提供了一組函數,例如:

int strlen( const char* ); // 返回字符串的長度

int strcmp( const char*, const char* ); // 比較兩個字符串是否相等

char* strcpy(char*, const char* ); // 把第二個字符串拷貝到第一個字符串中

標準 C 庫作為標準的 C++的一部分被包含在其中。為使用這些函數,我們必須包含相關的 C 頭文件#include <cstring>

1.1 不調用庫函數,實現C風格字符串的常用基本函數

#include<iostream>
#include<cstring>
#include<cassert>
using namespace std;
/*返回字符串長度*/
int MyStrlen(const char * ch)
{
	assert(ch!=NULL);
	int i=0,count=0;
	const char *t=ch;	//用一個臨時指針去遍歷,防止改變原來指針指向。
	while(t[i]!='\0')
	{
		count++;
		i++;
	}
	return count;
}

/*把第二個字符串拷貝到第一個字符串中,返回第一個字符串的首部指針。*/
char* MyStrcpy(char *des,const char *src)
{
	assert((des!=NULL)&&(src!=NULL));
	int i=0;
	char *add=des;	//用add記錄des的首部。
	while(src[i]!='\0')
	{
		des[i]=src[i];
		i++;
	}
	des[i]='\0';
	return add;
}

/*
比較兩個字符串是否相等。
相等則返回0,前一個字符串比后一個小則返回-1,否則返回1。
*/
int MyStrcmp(const char *ch2,const char *ch3)
{
	assert((ch2!=NULL)&&(ch3!=NULL));
	int i=0;
	const char *str1=ch2;	//定義兩個臨時指針。
	const char *str2=ch3;
	while((str1[i]!='\0')||(str2[i]!='\0'))
	{
		if(str1[i]<str2[i])
		{
			return -1;
		}
		else if(str1[i]>str2[i])
		{
			return 1;
		}
		else
		{
			i++;
		}
	}
	return 0;
}
int main()
{
	char ch[]="cavely";
	char ch3[]="julia";
	cout<<MyStrlen(ch)<<endl;	//6
	cout<<MyStrcmp(ch,ch3)<<endl;	//-1
	/*
	下面這兩句不能寫成:
	char ch4[100];
	ch4=MyStrcpy(ch,ch3);	//數組名是一個地址【常量】。不能被賦值
	*/
	char *ch4;
	ch4=MyStrcpy(ch,ch3);
	cout<<ch4<<endl;	//julia
	return 0;
}

2.string 類類型

要使用 string 類型 必須先包含相關的頭文件#include <string>

string str("hello");       //①定義一個帶初值的字符串

string str2;                 // ②定義空字符串

string str3( str );        //③用一個 string 對象來初始化另一個 string 對象

2.1 對字符串類的基本操作:

(1)str的長度由 size()操作返回(不包含終止空字符),例如str.size()的值為5。

(2)使用 empty()操作判斷字符串是否為空,例如:str2.empty()。如果字符串中不含有字符,則 empty()返回布爾常量 true ,否則返回 false。

(3)還可以直接使用賦值操作符 = 拷貝字符串,例如:st2 = st3; // 把 st3 拷貝到 st2 中

(4)可以使用加操作符 +或看起來有點怪異的復合賦值操作符 += 將兩個或多個字符串連接起來。例如,給出兩個字符串

string s1( "hello, " );

string s2( "world\n" );

我們可以按如下方式將兩個字符串連接起來形成第三個字符串

string s3 = s1 + s2;

如果希望直接將 s2 附加在 s1 后面 那么可使用 += 操作符

s1 += s2;

(5)string 類型支持通過下標操作符訪問單個字符,例如,在下面的代碼段中,字符串中的所有句號被下劃線代替。

string str( "fa.disney.com" );
int size = str.size();
for ( int ix = 0; ix < size; ++ix )
if ( str[ ix ] == '.' )
    str[ ix ] = '_';

上面代碼段的實現可用如下語句替代:

replace( str.begin(), str.end(), '.', '_' );

replace()是泛型算法中的一個,begin()和 end()操作返回指向 string 開始和結束處的迭代器(iterator) 。迭代器是指針的類抽象 ,由標準庫提供。replace()掃描 begin()和 end()之間的字符。每個等于句號的字符,都被替換成下劃線。

2.2 C 風格的字符串與 string 對象的轉換

string 類型能夠自動將 C 風格的字符串轉換成 string 對象。例如,這使我們可以將一個 C 風格的字符串賦給一個 string 對象。

string s1;

const char *pc = "a character array";

s1 = pc; //OK

但是,反向的轉換不能自動執(zhí)行。對隱式地將 string 對象轉換成 C 風格的字符串 string類型沒有提供支持。例如下面,試圖用 s1 初始化 str 就會在編譯時刻失敗。

char *str = s1; // 編譯時刻類型錯誤

為實現這種轉換,必須顯式地調用名為 c_str()的操作。名字 c_str()代表了 string 類型與 C 風格字符串兩種表示法之間的關系。字面意思是,給我一個 C 風格的字符串表示——即 指向字符數組起始處的字符指針。為了防止字符數組被程序直接處理, c_str()返回了一個指向常量數組的指針 const char*

所以,正確的初始化應該是:const char *str = s1.c_str(); // OK

以上是c/c++字符串函數是什么類型的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

本文標題:c/c++字符串函數是什么類型
新聞來源:http://bm7419.com/article0/gegsoo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站收錄、品牌網站建設企業(yè)建站、用戶體驗、域名注冊網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司