C語言中沒有字符串這種數(shù)據(jù)類型,可以通過char型數(shù)組來替代; 注意:
在邯鄲等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需設(shè)計(jì)網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè),邯鄲網(wǎng)站建設(shè)費(fèi)用合理。C語言中,字符串一定是一個(gè)char型數(shù)組,但char型數(shù)組未必是字符串;
在C語言的char型數(shù)組中,數(shù)字0(和字符‘\0’等價(jià))結(jié)尾的char數(shù)組就是一個(gè)字符串,但如果char型數(shù)組沒有以數(shù)字0結(jié)尾,那么就不是一個(gè)字符串,只是普通字符數(shù)組,所以字符串是一種特殊的char的數(shù)組。
#include
int main0801()
{
char c1[] = { 'c', ' ', 'p', 'r', 'o', 'g' }; //普通字符數(shù)組
printf("c1 = %s\n", c1); //亂碼,因?yàn)闆]有’\0’結(jié)束符
//以‘\0’(‘\0’就是數(shù)字0)結(jié)尾的字符數(shù)組是字符串
char c2[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0' };
printf("c2 = %s\n", c2);
//字符串處理以‘\0’(數(shù)字0)作為結(jié)束符,后面的'h', 'l', 'l', 'e', 'o'不會輸出
char c3[] = { 'c', ' ', 'p', 'r', 'o', 'g', '\0', 'h', 'l', 'l', 'e', 'o', '\0' };
printf("c3 = %s\n", c3);
return 0;
}
運(yùn)行結(jié)果:
如圖:
char1沒有’\0’,輸出了亂碼
char2有’\0’,正常輸出
char3中遇到第一個(gè)\0后,之后的字符串就不再輸出。
8.2 字符串的初始化#include
int main()
{
//不指定長度,沒有0結(jié)束符,有多少個(gè)元素就有多長
char buf[] = { 'a','b','c' };
printf("buf= %s\n", buf);
//指定長度,后面沒有賦值的元素,自動補(bǔ)0
char buf2[100] = { 'a','b','c' };
char buf[1000] = { "hello" };
printf("buf2=%s\n", buf2);
//所有元素賦值為0
char buf3[100] = { 0 };
//char buf4[2] = { '1','2','3' };//數(shù)組越界
char buf5[50] = { '1','a','b','0','7' };
printf("buf5=%s\n", buf5);
char buf6[50] = { '1','a','b',0,'7' };
printf("buf6=%s\n", buf6);
char buf7[50] = { '1','a','b','\0','7' };
printf("buf7=%s\n", buf7);
//使用字符串初始化,編譯器自動在后面補(bǔ)0,常用
char buf8[] = "dgasiugduaishg";
//'\0'后面最好不要連著數(shù)字,有可能幾個(gè)數(shù)字連起來正好是一個(gè)轉(zhuǎn)義字符
//'\ddd'八進(jìn)制字義字符,'\xdd'十六進(jìn)制轉(zhuǎn)義字符
//\012相當(dāng)于
char str[] = "\012abc";
printf("str==%s\n", str);
return 0;
}
8.3 字符串的輸入輸出由于字符串采用了'\0'標(biāo)志,字符串的輸入輸出將變得簡單方便。
#define? _CRT_SECURE_NO_WARNINGS
#include
int main()
{
char str[100];
printf("input string1:\n");
scanf("%s", str);//scanf("%s", str);默認(rèn)以空格為分隔
printf("output:%s\n", str);
return 0;
}
如圖,空格后面被忽略
8.3.1 gets()
功能:從標(biāo)準(zhǔn)輸入讀入字符,并保存到s指定的內(nèi)存空間,直到出現(xiàn)換行符或讀到文件結(jié)尾為止。
參數(shù):
s:字符串首地址
返回值(char*):
成功:讀入的字符串
失?。篘ULL
gets(str)與scanf("%s", str)的區(qū)別:
gets(str)允許輸入的字符串含有空格
scanf("%s", str)不允許含有空格
注意:由于scanf()和gets()無法知道字符串s大小,必須遇到換行符或讀到文件結(jié)尾為止才接收輸入,因此容易導(dǎo)致字符數(shù)組越界(緩沖區(qū)溢出)的情況,所以我們在定義char型數(shù)組時(shí),應(yīng)該確保其空間足夠大。
char str[100];
printf("請輸入str: ");
gets(str);
printf("str = %s\n", str);
8.3.2 puts()
功能:標(biāo)準(zhǔn)設(shè)備輸出s字符串,在輸出完成后自動輸出一個(gè)'\n'。
參數(shù):
s:字符串首地址
返回值(int):
成功:非負(fù)數(shù)
失敗:-1
int main() {
printf("hello world");
puts("hello world");
return 0;
}
8.4 strlen()功能:計(jì)算指定指定字符串s的長度,不包含字符串結(jié)束符‘\0’
參數(shù):
s:字符串首地址
返回值:字符串s的長度(unsigned? int)
char str[] = "abc\0defg";
int n = strlen(str);
printf("n = %d\n", n);
實(shí)踐時(shí)間(10分鐘)
1. 根據(jù)案例需求,用C或C++語言編寫代碼,完成程序。
案例:字符串追加
使用C語言編寫一段程序,要求不允許使用標(biāo)準(zhǔn)庫函數(shù),在一串字符串后面追加另一串字符串,使得兩串字符串拼接在一起。
1.?? 輸入兩串字符串
2.?? 在不使用標(biāo)準(zhǔn)庫函數(shù)的情況下將第二串字符串內(nèi)容拼接到第一串字符串末尾,使得兩串字符串拼接成為全新的 字符串。
3.?? 將新的字符串打印在屏幕上。
示例:
#include
//#include
int main()
{
char s1[200];
char s2[100];
printf("輸入第一個(gè)字符串");
gets(s1);
printf("輸入第二個(gè)字符串");
gets(s2);
int i=0, j;
while (s1[i] !=0)
{
i++;
}
for (i, j = 0; s2[j] !=0; i++, j++)//只用在s1的后面接上即可
{
s1[i] = s2[j];
}
s1[i] = 0;//不把最后一位手動變成0,會導(dǎo)致亂碼
puts(s1);???
}
8.5 字符串處理相關(guān)函數(shù)8.5.1 strcpy()
strcpy? (dest,? src);
功能:把src所指向的字符串復(fù)制到dest所指向的空間中,'\0'也會拷貝過去
參數(shù):
dest:目的字符串首地址(char*)
src:源字符首地址(const char*)
返回值(char*):
成功:返回dest字符串的首地址
失?。篘ULL
注意:如果參數(shù)dest所指的內(nèi)存空間不夠大,可能會造成緩沖溢出的錯(cuò)誤情況。
char dest[20] = "123456789";
char src[] = "hello world";
strcpy(dest, src);
printf("%s\n", dest);
8.5.2 strncpy()
strncpy? (dest,? src, n);
功能:把src指向字符串的前n個(gè)字符復(fù)制到dest所指向的空間中,是否拷貝結(jié)束符看指定的長度是否包含'\0'。
參數(shù):
dest:目的字符串首地址(char*)
src:源字符首地址(const char*)
n:指定需要拷貝字符串個(gè)數(shù)(unsigned int)
返回值(char*):
成功:返回dest字符串的首地址
失?。篘ULL
#define _CRT_SECURE_NO_WARNINGS
#include
#include
int main()
{
char dest[20];
char src[] = "hello world";
strncpy(dest, src, 5);
printf("%s\n", dest); //最后一位未致0
dest[5] = '\0';
printf("%s\n", dest);
}
8.5.3 strcat()
strcat (dest,? src);
功能:將src字符串連接到dest的尾部,‘\0’也會追加過去
參數(shù):
dest:目的字符串首地址(char*)
src:源字符首地址(const char*)
返回值(char*):
成功:返回dest字符串的首地址
失?。篘ULL
#include
int main()
{
char str[20] = "123";
char src[] = "hello world";
printf("%s\n", strcat(str, src));
}
8.5.4 strncat()
strncat (dest,? src, n);
功能:將src字符串前n個(gè)字符連接到dest的尾部,‘\0’也會追加過去
參數(shù):
dest:目的字符串首地址(char*)
src:源字符首地址(const char*)
n:指定需要追加字符串個(gè)數(shù)(unsigned int)
返回值(char*):
成功:返回dest字符串的首地址
失?。篘ULL
#include
int main()
{
char str[20] = "123";
char src[] = "hello world";
printf("%s\n", strncat(str, src, 5));
}
8.5.5 strcmp()
strcmp? (s1, s2);
功能:比較? s1 和 s2 的大小,比較的是字符ASCII碼大小。
參數(shù):
s1:字符串1首地址(const char *)
s2:字符串2首地址(const char *)
返回值(int):
相等:0
大于:>0 在不同操作系統(tǒng)strcmp結(jié)果會不同? 返回ASCII差值
小于:<0
#include
#include
int main()
{
char str1[] = "hello world";
char str2[] = "hello mike";
if (strcmp(str1, str2) == 0)
printf("str1==str2\n");
else if
(strcmp(str1, str2) >0)
printf("str1>str2\n");
else
printf("str1 } 8.5.6 strncmp() strcmp? (s1, s2, n); 功能:比較? s1 和 s2 前n個(gè)字符的大小,比較的是字符ASCII碼大小。 參數(shù): s1:字符串1首地址(const char *) s2:字符串2首地址(const char *) n:指定比較字符串的數(shù)量(unsigned int) 返回值(int): 相等:0 大于:>0 小于:<0 #include #include int main() { char str1[] = "hello world"; char str2[] = "hello mike"; if (strncmp(str1, str2, 5) == 0) printf("str1==str2\n"); else if (strcmp(str1, "hello world") >0) printf("str1>str2\n"); else printf("str1 } 8.5.7 strchr() strchr(s, c); 功能:在字符串s中查找字母c出現(xiàn)的位置 參數(shù): s:字符串首地址(const char *) c:匹配字母(字符)(int) 返回值(char*): 成功:返回第一次出現(xiàn)的c地址 失?。篘ULL #include #include int main() { char src[] = "ddda123abcd"; char* p = strchr(src, 'a'); printf("p = %s\n", p); } 如圖所示,第一個(gè)a前面的字符串被省略 8.5.8 strstr() strstr (haystack, needle); 功能:在字符串haystack中查找字符串needle出現(xiàn)的位置 參數(shù): haystack:源字符串首地址(const char*) needle:匹配字符串首地址(const char*) 返回值(char*): 成功:返回第一次出現(xiàn)的needle地址 失?。篘ULL #include #include int main() { char src[] = "ddddabcd123abcd333abcd"; char* p = strstr(src, "abcd"); printf("p = %s\n", p); } 8.5.9 atoi() atoi (nptr); 功能:atoi()會掃描nptr字符串,跳過前面的空格字符,直到遇到數(shù)字或正負(fù)號才開始做轉(zhuǎn)換,而遇到非數(shù)字或字符 串結(jié)束符('\0')才結(jié)束轉(zhuǎn)換,并將結(jié)果返回返回值。 參數(shù): nptr:待轉(zhuǎn)換的字符串(const char*) 返回值:成功轉(zhuǎn)換后整數(shù)(int) 類似的函數(shù)有: l atof():把一個(gè)小數(shù)形式的字符串轉(zhuǎn)化為一個(gè)浮點(diǎn)數(shù)。 l atol():將一個(gè)字符串轉(zhuǎn)化為long類型 8.6 簡單了解C++的string類 C++? 標(biāo)準(zhǔn)庫提供了 string 類類型,支持上述所有的操作,另外還增加了其他更多的功能。我們現(xiàn)在簡單了解一下 C++? 標(biāo)準(zhǔn)庫中的這個(gè)類,現(xiàn)在讓我們先來看看下面這個(gè)實(shí)例: #include #include using namespace std; int main() { string str1 = "Hello"; string str2 = "World"; string str3; int? len; // 復(fù)制??? str1 到??? str3 str3 = str1; cout<< "str3 : "<< str3<< endl; // 連接??? str1 和??? str2 str3 = str1 + str2; cout<< "str1 + str2 : "<< str3<< endl; // 連接后,str3 的總長度 len = str3.size(); cout<< "str3.size() :? "<< len<< endl; return 0; } 現(xiàn)在您可能還無法透徹地理解這個(gè)實(shí)例,因?yàn)榈侥壳盀橹刮覀冞€沒有討論類和對象。所以現(xiàn)在您可以只是粗略地看 下這個(gè)實(shí)例,等理解了面向?qū)ο蟮母拍钪笤倩仡^來理解這個(gè)實(shí)例。 你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁標(biāo)題:c語言中字符串詳解-創(chuàng)新互聯(lián)
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站導(dǎo)航、商城網(wǎng)站、自適應(yīng)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源:
創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://aaarwkj.com/article26/jcpjg.html
猜你還喜歡下面的內(nèi)容