1.strcmp函數
一般形式:strcmp(字符串1,字符串2)
功能:比較兩個字符串的大小
比較方式:兩個字符串自左向右逐個字符相比(按ASCII值大小相比較)直到遇到不同的字符或遇‘\0’爲止。
(1)字符串1=字符串2 返回0
(2)字符串1>字符串2 返回一個正整數(不是1)
(3)字符串1<字符串2 返回一個負整數(不是-1)
特別注意:strcmp(char * s1, char * s2) 這裏面只能比較字符串,不能比較數字等其他形式的參數。
示例:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char *name[]={"follow me","basic","great wall","forran","computer"};
int i,j,k;
int n=5;
char *temp;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[j],name[k])<0) k=j;
if(k!=i)
{
temp=name[i];
name[i]=name[k];
name[k]=temp;
}
}
for(i=0;i<n;i++)
cout<<name[i]<<endl;
return 0;
}
運行結果:
basic
computer
follow me
forran
great wall
2.strcat函數
strcat()接受兩個字符串參數,將第二個字符串的一份拷貝添加到第一個字符串的結尾,(覆蓋第一個字符串結尾處的‘\0’)從而使第一個字符串成爲一個新的組合字符串,第二格字符串不改變。
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char a[100] = "hello";
const char* b = "world";
strcat(a, b);
cout << a;
return 0;
}
運行結果:
helloworld
這就是strcat(a,b),將b的字符串,接到了a上,a組合成了一個新的字符串,這也就需要a有足夠的空間去容納後面的字符串,所以a會是一個數組。
(這裏覺得寫得有些不太對,如有錯誤,歡迎指正,感謝!)
3.strlen函數
功能:檢測字符串實際長度,從代表該字符串的第一個地址開始遍歷,直到遇到結束符’\0’停止。返回的長度大小不包括‘\0’。
格式:strlen(字符指針表達式)即strlen(char*)
但我相信應該還有一些人會和我一樣總是分不清它和sizeof吧!
其實sizeof是一個運算符,它不是一個函數!
sizeof運算符
計算所佔的字節大小
功能:獲得保證能容納實現所建立的最大對象的字節大小
它的參數可以是數組、指針、類型、對象、函數等
具體而言,當參數分別如下時,sizeof返回的值表示的含義如下:
數組——編譯時分配的數組空間大小;
指針——存儲該指針所用的空間大小(在32位機器上是4,64位機器上是8);
類型——該類型所佔的空間大小;
對象——對象的實際佔用空間大小;
函數——函數的返回類型所佔的空間大小。函數的返回類型不能是void。
(此處借鑑了其他博主文章
原文鏈接:https://blog.csdn.net/ly_6699/article/details/89482591)
這裏給出一個例子,對二者進行比較
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
char p[] = "hello";
cout << "p: " << p << " " << strlen(p) << " " << sizeof(p) << endl;
char p1[] = "hello\0";
cout << "p1: " << p1 << " " << strlen(p1) << " " << sizeof(p1) << endl;
char p2[] = "hello\\0";
cout << "p2: " << p2 << " " << strlen(p2) << " " << sizeof(p2) << endl;
char p3[] = "hello\\\0";
cout << "p3: " << p3 << " " << strlen(p3) << " " << sizeof(p3) << endl;
char p4[] = "hel\0lo";
cout << "p4: " << p4 << " " << strlen(p4) << " " << sizeof(p4) << endl;
char p5[] = "hel\\0lo";
cout << "p5: " << p4 << " " << strlen(p5) << " " << sizeof(p5) << endl;
return 0;
}
運行結果:
p: hello 5 6
p1: hello 5 7
p2: hello\0 7 8
p3: hello\ 6 8
p4: hel 3 7
p5: hel 7 8
想要理解這個例子,還要了解轉義序列。
反斜線:\ (即會打印出一個反斜線\)
p2: hello\0 7 8
這裏的\是由\轉義來的,轉義後的\也就不能和後面的0結合了,就是兩個普通的\和0
p3: hello\ 6 8
這裏也是\轉義爲一個\後,遇到了\0,所以會停止
p4: hel 3 7
這個大家應該可以理解吧,就是遇到了中間的\0,就終止了
p5: hel 7 8
這個的解釋就暫時先空着吧,我也沒搞懂呢,對不起大家啦,等我搞懂了會在回來寫的/愛你們哦
對於這個一定記住:strlen 計算的是字符串的實際長度,遇到\0即停止;sizeof 計算整個字符串所佔內存字節數的大小,遇到\0也要+1計算;
以上是自己的一些總結,如有錯誤歡迎指正!
感激!