欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c語(yǔ)言中字符串與字符串?dāng)?shù)組詳解

 更新時(shí)間:2021年11月18日 09:11:41   作者:crazy_zhangcong  
在C語(yǔ)言當(dāng)中,字符串?dāng)?shù)組可以使用char a[] [10]; 或者char *a[]; 表示,下面這篇文章主要給大家介紹了關(guān)于c語(yǔ)言中字符串與字符串?dāng)?shù)組的相關(guān)資料,需要的朋友可以參考下

字符串

  • 用雙引號(hào)引起來(lái)的就是字符串,字符串由字符組成
  • 字符串使用%s格式化輸出
  • 字符串以\0結(jié)尾,沒(méi)有\(zhòng)0就不是字符串
  • 只要是用雙引號(hào)括起來(lái)的都是字符串
  • 字符串的本質(zhì)就是數(shù)組
    注意: 字符串變量和普通的字符數(shù)組有一定的區(qū)別,C語(yǔ)言規(guī)定,字符串必須以\0結(jié)尾(作為字符串的結(jié)束符號(hào)),所以字符串變量的元素個(gè)數(shù)比字符數(shù)組的元素多一個(gè)\0
#include <stdio.h>

int main(int argc, const char * argv[]) {
    
    char name[] = "zhangsan";
    
    // %u 表示無(wú)符號(hào),sizeof 返回的是一個(gè)無(wú)符號(hào)長(zhǎng)整型
    printf("name --> %s  size --> %lu\n", name, sizeof(name));      // name --> zhangsan  size --> 9
    
    // 字符串本質(zhì)就是一個(gè)字符數(shù)組,前提是末尾以\0結(jié)尾
    char name1[] = {'z', 'h', 'a', 'n', 'g', 's', 'a', 'n', '\0'};
    printf("name1 --> %s\n", name1);    // name1 --> zhangsan
    
    // 部分初始化中,沒(méi)有被初始化的元素默認(rèn)是0, \0 對(duì)應(yīng)的ASCII值是 0
    char name2[9] = {'z', 'h', 'a', 'n', 'g', 's', 'a', 'n'};
    printf("name2 --> %s\n", name2);    // name2 --> zhangsan
    
    // 字符串的本質(zhì)就是數(shù)組
    char name3[] = "lisi";
    printf("name3 --> %s \n", name3);   // name3 --> lisi
    name3[0] = 'x';
    printf("name3 --> %s \n", name3);   // name3 --> xisi
   

    return 0;
}

字符串輸出

字符串輸出可以使用printf 和 puts 進(jìn)行輸出,各有利弊

- 輸出字符串
 - 使用printf的%s占位符輸出
  - 弊端:如果想要換行,必須加上\n
  - 優(yōu)點(diǎn):可以自定義格式化需要的字符串,也就是可以按照我們需要的格式來(lái)輸出
 - 使用puts函數(shù)進(jìn)行輸出
  - 優(yōu)點(diǎn):可以自動(dòng)換行
  - 缺點(diǎn):不可以自定義格式,只能原樣輸出

// printf
char str[] = “l(fā)isi”;
printf(“name = %s!!!\n”, str);
printf("-----\n");

// puts
// 自動(dòng)換行,只能原樣輸出
puts(str);
printf("----\n");

#### 字符串輸入

字符串輸入可以使用 scanf 和 gets 進(jìn)行輸入,各有利弊

輸入字符串

  • 使用scanf的%s占位符接收鍵盤(pán)輸入的字符串
    • scanf 接收字符串,會(huì)以空格,tab,回車作為結(jié)束符號(hào),利用scanf接收字符串時(shí),字符串不能出現(xiàn)空格,tab,回車
  • 使用gets接收字符串
// scanf
printf("請(qǐng)輸入一個(gè)字符串:\n");
char buf[10];
scanf("%s", buf);   // 輸入:fdsa fdas
printf("buf --> %s\n", buf);    // buf --> fdsa


// gets
char buf[10];
printf("請(qǐng)輸入一個(gè)字符串,使用gets接收:\n");
gets(buf);
printf("buf --> %s\n", buf);    // buf --> fdsaf fdsa

字符串常用方法

計(jì)算字符串的長(zhǎng)度

#include <stdio.h>
#include <string.h>

// 申明函數(shù)
int stringLen(char value[]);


int main(int argc, const char * argv[]) {
    
    char string[] = "zhangsan";
    
    // 計(jì)算字符串的長(zhǎng)度,不包括末尾\0的長(zhǎng)度
    
    // 調(diào)用系統(tǒng)內(nèi)置函數(shù)strlen 計(jì)算字符串的長(zhǎng)度,需要先導(dǎo)入 string.h 頭文件
    size_t length = strlen(string);     // lenght --> 8
    printf("lenght --> %lu\n", length);
    
    
    // 自定義計(jì)算字符串長(zhǎng)度的函數(shù)
    int length2 = stringLen(string);
    printf("length2 --> %i\n", length2);    // length2 --> 8
    return 0;
}

// 自定義計(jì)算字符串長(zhǎng)度的函數(shù)
int stringLen(char value[]) {
    int count = 0;
    while (value[count] != '\0') {
        count ++;
    }
    return count;
}

字符串拼接

使用內(nèi)置方法strcat進(jìn)行2個(gè)字符串拼接,將后者拼接到前者后面,前提是前者空余的長(zhǎng)度要大于后者的長(zhǎng)度,否則會(huì)報(bào)錯(cuò)

使用內(nèi)置方法strncat進(jìn)行2個(gè)字符串拼接,可以指定將后者的前多少個(gè)字符與前者進(jìn)行拼接

// 字符串拼接
char str1[20] = "hello";
char str2[10] = " world";

printf("str1拼接前 --> %s\n", str1);        // str1拼接前 --> hello
printf("str2拼接前 --> %s\n", str2);        // str2拼接前 -->  world
strcat(str1, str2);
printf("\n");
printf("str1拼接后 --> %s\n", str1);        // str1拼接后 --> hello world
printf("str2拼接后 --> %s\n", str2);        // str2拼接后 -->  world

// 使用 strncat 可以指定將后者的前多少個(gè)字符與前者進(jìn)行拼接
strncat(str1, str2, 3);		// 最后一個(gè)參數(shù)3表示指定str2的前多少個(gè)字符拼接到str1后面
printf("str1拼接后 --> %s\n", str1);        // str1拼接后 --> hello world wo
printf("str2拼接后 --> %s\n", str2);        // str2拼接后 -->  world

字符串拷貝

strcpy 函數(shù)會(huì)將源的數(shù)據(jù)拷貝到目錄中,并且會(huì)覆蓋掉目標(biāo)中原有的數(shù)據(jù),目標(biāo)的長(zhǎng)度必須能夠存放拷貝的數(shù)據(jù),長(zhǎng)度不夠會(huì)報(bào)錯(cuò)

strncpy 函數(shù)在strcpy函數(shù)的基礎(chǔ)之上,增加一個(gè)參數(shù),可以指定拷貝幾個(gè)字符0

// 將str2中的內(nèi)容拷貝到str1中
char str1[20] = "hello";
char str2[] = " world!";

printf("str1 拷貝前 --> %s\n", str1);      // str1 --> hello
printf("str2 拷貝前 --> %s\n", str2);      // str2 -->  world!
strcpy(str1, str2);
printf("str1 拷貝后 --> %s\n", str1);      // str1 -->  world!
printf("str2 拷貝后 --> %s\n", str2);      // str2 -->  world!

// strncpy 函數(shù)在strcpy函數(shù)的基礎(chǔ)之上,增加一個(gè)參數(shù),可以指定拷貝幾個(gè)字符
char str3[20] = "hello";
char str4[] = "_world!";
strncpy(str3, str4, 2);
printf("str3 拷貝后 --> %s\n", str3);      // str3 拷貝后 --> _wllo
printf("str4 拷貝后 --> %s\n", str4);      // str4 拷貝后 --> _world!

字符串比較

strcmp 會(huì)對(duì)傳入的字符串進(jìn)行比較,比較完畢后會(huì)返回一個(gè)整型的值

/*
	int result = strcmp(str1, str2)
	如果result等于0,證明兩個(gè)字符串相等
	如果result小于0,證明str1小于str2
	如果result大于0,證明str1大于str2
*/

char str1[] = "abc";
char str2[] = "abc";
int result = strcmp(str1, str2);
printf("result --> %i\n", result);  // result --> 0

char str1[] = "ab1";
char str2[] = "abc";
int result = strcmp(str1, str2);
printf("result --> %i\n", result);  // result --> -50

char str1[] = "absadsa";
char str2[] = "abc";
int result = strcmp(str1, str2);
printf("result --> %i\n", result);  // result --> 16

字符串?dāng)?shù)組

如果想存儲(chǔ)一堆字符串可以使用字符串?dāng)?shù)組,字符串?dāng)?shù)組就是二維數(shù)組

char names[5][20] = {
	"zhangsan",
	"lisi",
	"wangwu",
}

總結(jié)

到此這篇關(guān)于c語(yǔ)言中字符串與字符串?dāng)?shù)組的文章就介紹到這了,更多相關(guān)c語(yǔ)言字符串與字符串?dāng)?shù)組內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++判斷矩形相交的方法

    C++判斷矩形相交的方法

    這篇文章主要介紹了C++判斷矩形相交的方法,涉及C++針對(duì)平面坐標(biāo)數(shù)學(xué)運(yùn)算的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C++中cout的格式使用詳細(xì)介紹

    C++中cout的格式使用詳細(xì)介紹

    cout 是C++中 ostream 類型的對(duì)象,該類被封裝在 < iostream > 庫(kù)中,該庫(kù)定義的名字都在命名空間 std 中,所以 cout 全稱是 std::cout 。本文重點(diǎn)給大家介紹C++中cout的格式使用,需要的朋友參考下吧
    2021-06-06
  • C++深度探索虛函數(shù)覆蓋示例

    C++深度探索虛函數(shù)覆蓋示例

    虛函數(shù)主要通過(guò)V-Table虛函數(shù)表來(lái)實(shí)現(xiàn),該表主要包含一個(gè)類的虛函數(shù)的地址表,可解決繼承、覆蓋的問(wèn)題,下面這篇文章主要給大家介紹了如何通過(guò)一篇文章帶你掌握C++虛函數(shù)的來(lái)龍去脈,需要的朋友可以參考下
    2022-12-12
  • 函數(shù)外初始化與函數(shù)內(nèi)初始化詳細(xì)解析

    函數(shù)外初始化與函數(shù)內(nèi)初始化詳細(xì)解析

    函數(shù)內(nèi)初始化:bool FillStr(char *&szDst, int nSize);第一個(gè)參數(shù)中的&一定不能少,這是因?yàn)樵诤瘮?shù)外部我們只聲明了這個(gè)指針,具體這個(gè)指針指向內(nèi)存中的哪個(gè)地址我們并不知道,所以&是為了說(shuō)明傳遞的是這個(gè)指針的引用,那么在函數(shù)內(nèi)初始化后這個(gè)指針的地址也就是外面指針的地址了
    2013-09-09
  • 關(guān)于C++中菱形繼承和虛繼承的問(wèn)題總結(jié)

    關(guān)于C++中菱形繼承和虛繼承的問(wèn)題總結(jié)

    C++的三大特性為:封裝,繼承,多態(tài)。但是在繼承中,存在一些使用方面的問(wèn)題需要注意,下面這篇文章主要給大家總結(jié)介紹了關(guān)于C++中菱形繼承和虛繼承的問(wèn)題,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-08-08
  • C語(yǔ)言MFC導(dǎo)出dll回調(diào)函數(shù)方法詳解

    C語(yǔ)言MFC導(dǎo)出dll回調(diào)函數(shù)方法詳解

    這篇文章主要為大家介紹了C語(yǔ)言MFC導(dǎo)出dll回調(diào)函數(shù)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • C++指針運(yùn)算符(&和*)的實(shí)現(xiàn)

    C++指針運(yùn)算符(&和*)的實(shí)現(xiàn)

    C++ 提供了兩種指針運(yùn)算符,一種是取地址運(yùn)算符 &,一種是間接尋址運(yùn)算符 *,本文就詳細(xì)的介紹一下這兩種運(yùn)算符的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • C++基于OpenCV實(shí)現(xiàn)手勢(shì)識(shí)別的源碼

    C++基于OpenCV實(shí)現(xiàn)手勢(shì)識(shí)別的源碼

    這篇文章主要介紹了C++基于OpenCV手勢(shì)識(shí)別的實(shí)現(xiàn)源碼,這里用到背景減法模型知識(shí),具體實(shí)例代碼跟隨小編一起看看吧
    2021-09-09
  • 一篇文章帶你了解C++的KMP算法

    一篇文章帶你了解C++的KMP算法

    這篇文章主要介紹了c++ 實(shí)現(xiàn)KMP算法的示例,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下,希望能給你帶來(lái)幫助
    2021-08-08
  • 基于c++中的默認(rèn)拷貝函數(shù)的使用詳解

    基于c++中的默認(rèn)拷貝函數(shù)的使用詳解

    本篇文章對(duì)c++中默認(rèn)拷貝函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下
    2013-05-05

最新評(píng)論