C C關於字串的使用與相互轉化

2021-07-29 10:28:00 字數 3601 閱讀 8447

一,c字串

c語言中, 沒有字串的資料型別,可使用乙個以null('\0')字元結尾的字元陣列來儲存字串。

只有以null字元結尾的字元陣列才是c字串,否則只是一般的c字元陣列。

相關函式等在標頭檔案 注:

是c版本的標頭檔案,包含比如strcpy()之類的字串處理函式。

在c++標準化(2023年)為了相容以前將所有這些檔案都進行了新的定義,加入到了標準庫中,加入後的檔名就新增了乙個"c"字首並且去掉了.h的字尾名,所以string.h標頭檔案成了cstring標頭檔案。

是c++標準定義的標頭檔案,定義了乙個string的字串類幷包含了string類的各種操作。同時又包含了老的c版本的字串操作。

1.  

使用字元陣列存c字串

定義時可以利用"="號進行初始化,但之後不能用"="對c字串再賦值。再賦值可用strcpy()。

在c中也可以使用字元指標

來訪問乙個字串,通過字元指標指向存放字串陣列的首元素位址來進行訪問。

注意體會下例子注釋:

char a[11] = "kobe";//字串的初始化

//a="kobebryant"不能如此賦值!!

strcpy(a,"kobecryant");//字串的賦值

a[4]='b';

//獲取字串的長度,不包括'\0'在內

int n=strlen(a);

printf("%s\n",a);

char *b = "kobe mvp!";

b="kobe 24mvp!!";//指標可以這樣賦值!!

//b[7]='g';錯誤!

printf("%s\n",b);

2. 一些常用函式用法:

#include#includeint main()
上述執行結果:

二,c++字串

string並不是c++語言本身具有的基本型別,它是在c++標準庫中宣告的乙個字串類,用這種類可以定義物件。每乙個字串變數都是string類的乙個物件。使用string型別,我們必須包含標頭檔案

1,宣告與初始化

string str;

上面的宣告沒有傳入引數,所以就直接使用了string的預設的建構函式,這個函式所作的就是把str初始化為乙個空字串。

string類的建構函式和析構函式如下:

string s1

string s2(s1) 

string s2=s1

string s3("value") 

string s3="value"

string s(num,'c') //生成乙個字串,包含num個c字元

2. 輸入

(1)方法一:

cin>>s;

cout<

會忽略空白,從不是空白讀取到空白結束,空白指空格符換行符製表符等

(2)方法二:

使用getline函式可以保留空白,每次讀入一行遇到換行符為止。

例如:

#include#includeint main(){

std::string line;

while(getline(std::cin,line))

std::cout<

3. 物件操作函式(網上整理而來未全檢試)

隨機讀:

const char &operator(int n)const;

const char &at(int n)const;

char &operator(int n);

char &at(int n);

#include#includeusing namespace std;

int main(){

string s="kobe bryant",s2;

cout<

operator和at()均返回當前字串中第n個位置的字元,但at函式提供範圍檢查,當越界時會丟擲out_of_range異常,下標運算子不提供檢查訪問。

屬性:

string &insert(int p0, int n, char c);//此函式在p0處插入n個字元c

iterator insert(iterator it, char c);//在it處插入字元c,返回插入後迭代器的位置

void insert(iterator it, const_iterator first, const_iterator last);//在it處插入[first,last]之間的字元

void insert(iterator it, int n, char c);//在it處插入n個字元c

刪除:iterator erase(iterator first, iterator last);//刪除[first,last]之間的所有字元,返回刪除後迭代器的位置

iterator erase(iterator it);//刪除it指向的字元,返回刪除後迭代器的位置

string &erase(int pos = 0, int n = npos);//刪除pos開始的n個字元,返回修改後的字串

三,c和c++之間的轉化

1.關鍵:

const char *data()const;//返回乙個非null終止的c字元陣列

const char *c_str()const;//返回乙個以null終止的c字串

int copy(char *s, int n, int pos = 0) const;//把當前串中以pos開始的n個字元拷貝到以s為起始位置的

字元陣列

中,返回實際拷貝的數目

2.string-> const char *

兩種方法:

string s1="kobebryant";

const char *a=s1.c_str();

const char *b=s1.c_str();

cout char *

#include#include#includeusing namespace std;

int main(){

string s1="kobebryant 123";

char *c;

int len=s1.length();

c=(char*)malloc((len)*sizeof(char));

s1.copy(c,len,0);

cout<

4. char *->string

string s;

char *p="kobe mvp!";

s=p;

cout<

5. char[ ]->string

string s;

char p[10]="kobe mvp!";

s=p;

cout<6. string->char[ ]

string s = "kobe bryant";

char a[12];

for( int i=0;i

datetime與字串相互轉化

之前處理資料時,獨取出來的時間資料自動轉化成了str形式,我總是忘記處理的語句,在此做個筆記提醒自己。python標準庫包含用於日期 date 和時間 time 資料的資料型別,而且還有日曆方面的功能。我們主要會用到datetime time以及calendar模組。datetime.datetim...

Python bytes與字串的相互轉化

by.decode encoding utf 8 errors strict str.encode encoding utf 8 errors strict 1 usr bin env python2 coding utf 8 34 5 title 6 time 2020 2 21 15 5678 ...

數字與字串相互轉化 Unicode

vc中數字與字串轉換方法 1,char是最原始的字元資料型別,在非unicode版本的arx中使用 2,wchar t是寬位元組字元型別,在unicode版本中的arx中使用 3,t 是乙個巨集,可以將裡面的字串轉化成所在工程環境中的字元型別 4,tchar是unicode的一種,等同於 t 這個巨...