国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C語言零碎知識點之字符串?dāng)?shù)組

這篇具有很好參考價值的文章主要介紹了C語言零碎知識點之字符串?dāng)?shù)組。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

字符串?dāng)?shù)組的表示形式

在C語言中字符串?dāng)?shù)組有兩種表示方法:

  • 第一種,二維字符數(shù)組

可以利用二維字符數(shù)組來表示字符串,格式是:char strs[row][col];。例如:

char strs[4][6] = {"hello", "world", "c", "java"};// char 類型的二維數(shù)組

// 注意,也不支持先聲明再賦值。即下面的賦值方式是錯誤的
char strs[4][6];
strs = {"hello", "world", "c", "java"};

其中的 row 表示二維數(shù)組中的行,表示有幾個字符串;而 col 表示二維數(shù)組中的列,表示能存放字符串的最大長度。

  • 第二種,字符指針數(shù)組

可以用一維的字符指針數(shù)組來保存字符串,格式是:char* strs[len];。例如:

char* strs[4] = {"hello", "world", "c", "java"};// char* 類型的一維數(shù)組

注意,也不支持先聲明再賦值。即下面的賦值方式是錯誤的
char* strs[4];
strs = {"hello", "world", "c", "java"};

該一維數(shù)組中的每一個元素都是一個 char 類型的地址:

  • 第一個指針 strs[0] 指向第一個字符串中的第一個字符。即 *strs[0] 等于 'h'。
  • 第二個指針 strs[1] 指向第二個字符串中的第一個字符。即 *strs[1] 等于 'w'。

每個 strs[i] 都表示一個字符串,指針都指向?qū)?yīng)字符串的第一個字符。

因此實際上這個一維數(shù)組并不存放真正的字符串,而只是存放字符串的地址。

從鍵盤輸入字符串?dāng)?shù)組

有時候我們需要批量從鍵盤輸入字符串,無論是二維字符數(shù)組還是一維字符指針數(shù)組,都可以通過循環(huán)輸入字符串的方式來給字符串?dāng)?shù)組賦值,而從鍵盤輸入字符串的方式有 scanfgets 兩種,根據(jù)情況選擇即可:

  • 二維字符數(shù)組表示的字符串?dāng)?shù)組的批量賦值
#include <stdio.h>

int main() {
    // 聲明二維字符數(shù)組,注意指定字符串個數(shù)和字符串最大長度
    char strs[4][10];
    // 通過循環(huán)批量輸入字符串并賦值給字符串?dāng)?shù)組
    for (int i = 0; i < 4; i++) {
        scanf("%s", strs[i]);
        // 或者使用 gets() 函數(shù)
        // gets(strs[i]);
    }
    // 打印結(jié)果
    for (int i = 0; i < 4; i++) {
        printf("%s\n", strs[i]);
    }
}
  • 一維字符指針數(shù)組表示的字符串?dāng)?shù)組的批量賦值
#include <stdio.h>
#include <malloc.h>

int main() {
    // 聲明一維字符指針數(shù)組
    char *strs[4];
    // 通過循環(huán)批量輸入字符串并賦值給字符串?dāng)?shù)組
    for (int i = 0; i < 4; i++) {
        // 聲明字符串,并為其分配內(nèi)存空間
        char *str = (char *) malloc(sizeof(char) * 10);
        gets(str);// 使用 gets 函數(shù)從鍵盤讀取輸入
        strs[i] = str;// 賦值
        // 或者使用 scanf() 函數(shù)
        // scanf("%s", str);
        // 注意,我們不能直接使用 gets(strs[i]); 或者 scanf("%s", strs[i]); 來進行賦值
    }
    // 打印結(jié)果
    for (int i = 0; i < 4; i++) {
        printf("%s\n", strs[i]);
    }
}

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

輸出字符串?dāng)?shù)組,實際上就是循環(huán)數(shù)組輸出每個字符串,而輸出字符串的函數(shù)有 printfputs。

無論是二維字符數(shù)組還是一維字符指針數(shù)組,都可以通過循環(huán)遍歷輸出字符串?dāng)?shù)組中的所有字符串:

#include <stdio.h>

int main() {
    // 二維字符數(shù)組聲明的字符串?dāng)?shù)組
    char strs[4][10] = {"tom", "jack", "rose", "lily"};
    for (int i = 0; i < 4; i++) {
        printf("%s\t", strs[i]);
    }
    printf("\n");

    // 一維指針數(shù)組聲明的字符串?dāng)?shù)組
    char *strs2[4] = {"java", "javascript", "python", "c"};
    for (int i = 0; i < 4; i++) {
        puts(strs2[i]);
    }
}

訪問字符串?dāng)?shù)組中的字符串

如果要訪問二維字符數(shù)組聲明的字符串?dāng)?shù)組中的字符串,可以通過兩種方式:

  • 下標(biāo),例如:strs[i]
  • 數(shù)組名加下標(biāo),例如:*(strs + i)
#include <stdio.h>

int main() {
    char strs[4][10] = {"tom", "jack", "rose", "lily"};
    // 通過數(shù)組下標(biāo)來訪問,例如:strs[i],其中 i 是數(shù)組下標(biāo)
    printf("%s\n", strs[1]);
    // 通過數(shù)組名加下標(biāo)的方式來訪問,例如:*(strs + i),其中 strs 是數(shù)組名,而 i 是數(shù)組下標(biāo)
    printf("%s\n", *(strs + 2));
}

如果要訪問一維字符指針數(shù)組聲明的字符串?dāng)?shù)組中的字符串,也可以通過上面的兩種方式來訪問:

#include <stdio.h>

int main() {
    char *strs[4] = {"tom", "jack", "rose", "lily"};
    // 通過數(shù)組下標(biāo)來訪問,例如:strs[i],其中 i 是數(shù)組下標(biāo)
    printf("%s\n", strs[1]);
    // 通過數(shù)組名加下標(biāo)的方式來訪問,例如:*(strs + i),其中 strs 是數(shù)組名,而 i 是數(shù)組下標(biāo)
    printf("%s\n", *(strs + 2));
}

即無論是二維字符數(shù)組聲明的字符串?dāng)?shù)組還是一維字符指針數(shù)組聲明的字符串?dāng)?shù)組,都可以通過下標(biāo)或者數(shù)組名加下標(biāo)的方式訪問數(shù)組中的字符串。

修改字符串?dāng)?shù)組中的字符串

只有二維字符數(shù)組聲明的字符串?dāng)?shù)組才可以通過 strcpy 或者 sprintf 函數(shù)進行賦值,而一維字符指針數(shù)組聲明的字符串?dāng)?shù)組不允許修改數(shù)組中的字符串:

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

int main() {
    // 1.二維字符數(shù)組聲明的字符串?dāng)?shù)組
    char strs[4][10] = {"tom", "jack", "rose", "lily"};
    // 1.1 使用 strcpy 函數(shù)進行賦值
    strcpy(strs[1], "java");
    // 1.2 使用 sprintf 函數(shù)進行賦值
    sprintf(strs[2], "tomcat");
    // 輸出字符串,查看是否修改完成
    for (int i = 0; i < 4; i++) {
        printf("%s\t", strs[i]);
    }

    // 2.一維字符指針數(shù)組聲明的字符串?dāng)?shù)組,無法對字符串進行修改
    char *strs2[4] = {"java", "javascript", "c", "c++"};
    // 2.1 使用 strcpy 函數(shù)進行賦值,錯誤的示范
    // strcpy(strs2[1], "JAVASCRIPT");
    // 2.2 使用 sprintf 函數(shù)進行賦值,錯誤的示范
    // sprintf(strs2[2], "C");

    // 下面是錯誤的示例:
    // 通過數(shù)組下標(biāo)來修改,這是錯誤的
    // strs[1]="張三";
    // 通過數(shù)組名加下標(biāo)的方式來修改,這也是錯誤的
    // *(strs+2)="李四";
}

訪問字符串?dāng)?shù)組中的字符串的字符

如果是二維字符數(shù)組聲明的字符串?dāng)?shù)組,可以通過如下兩種方式來訪問(其中 i 和 j 都是指數(shù)組的下標(biāo),一個是橫坐標(biāo),一個是縱坐標(biāo),都從 0 開始):

  • 下標(biāo),格式是:字符串?dāng)?shù)組名[i][j]。例如,strs[0][1]。
  • 數(shù)組名加下標(biāo),格式是:*(*(字符串?dāng)?shù)組名 + i) + j)。例如,*(*(strs + 1) + 2)
#include <stdio.h>

int main() {
    // 1.二維字符數(shù)組聲明的字符串?dāng)?shù)組
    char strs[4][10] = {"tom", "jack", "rose", "lily"};
    // 1.1通過數(shù)組下標(biāo)訪問字符串?dāng)?shù)組中字符串中的字符
    char c;
    c = strs[1][1];
    printf("%c\n", c);// 'a'
    // 1.2通過數(shù)組名加下標(biāo)的方式訪問
    c = *(*(strs + 1) + 2);
    printf("%c\n", c);// 'c'
}

如果是一維指針數(shù)組聲明的字符串?dāng)?shù)組,也可以通過上面兩種方式來訪問:

#include <stdio.h>

int main() {
    // 2.一維指針數(shù)組聲明的字符串?dāng)?shù)組
    char *strs[4] = {"tom", "jack", "rose", "lily"};
    // 2.1通過數(shù)組下標(biāo)訪問字符串?dāng)?shù)組中字符串中的字符
    char c;
    c = strs[1][1];
    printf("%c\n", c);// 'a'
    // 2.2通過數(shù)組名加下標(biāo)的方式訪問
    c = *(*(strs + 1) + 2);
    printf("%c\n", c);// 'c'
}

修改字符串?dāng)?shù)組中的字符串的字符

如果是二維字符數(shù)組聲明的字符串?dāng)?shù)組,可以通過如下兩種方式來修改字符(其中 i 和 j 都是指數(shù)組的下標(biāo),一個是橫坐標(biāo),一個是縱坐標(biāo),都從 0 開始):

  • 下標(biāo),格式是:字符串?dāng)?shù)組名[i][j]='新字符'。例如,strs[0][1]='X'。
  • 數(shù)組名加下標(biāo),格式是:*(*(字符串?dāng)?shù)組名 + i) + j)='新字符'。例如,*(*(strs + 1) + 2)='X'
#include <stdio.h>

int main() {
    // 1.二維字符數(shù)組聲明的字符串?dāng)?shù)組
    char strs[4][10] = {"tom", "jack", "rose", "lily"};
    // 1.1通過數(shù)組下標(biāo)訪問字符串?dāng)?shù)組中字符串中的修改
    strs[1][1] = 'X';
    printf("%c\n", strs[1][1]);// 'X'
    // 1.2通過數(shù)組名加下標(biāo)的方式修改
    *(*(strs + 1) + 2) = 'Y';
    printf("%c\n", *(*(strs + 1) + 2));// 'Y'

    // 打印字符串,查看是否修改成功
    for (int i = 0; i < 4; i++) {
        puts(strs[i]);
    }
}

但是對于通過一維指針數(shù)組聲明的字符串?dāng)?shù)組,里面的字符串是無法修改的,而字符串里面的字符更不能修改。

#include <stdio.h>

int main() {
    // 2.一維字符指針數(shù)組聲明的字符串?dāng)?shù)組
    char *strs[4] = {"tom", "jack", "rose", "lily"};
    // 2.1通過數(shù)組下標(biāo)訪問字符串?dāng)?shù)組中字符串中的修改
    // strs[1][1] = 'X';// 錯誤的寫法
    // 2.2通過數(shù)組名加下標(biāo)的方式修改
    // *(*(strs + 1) + 2) = 'Y';// 錯誤的寫法
}

遍歷字符串?dāng)?shù)組中的所有字符串

即遍歷字符串?dāng)?shù)組,無論是二維字符數(shù)組聲明的字符串?dāng)?shù)組還是一維字符指針聲明的字符串?dāng)?shù)組,都可以通過 for 循環(huán)等循環(huán)語句來遍歷數(shù)組,然后通過下標(biāo)(例如,strs[i])或者數(shù)組名加下標(biāo)(例如,*(strs + i))的訪問字符串:文章來源地址http://www.zghlxwxcb.cn/news/detail-802301.html

#include <stdio.h>

int main() {
    // 1.二維字符數(shù)組聲明的字符串?dāng)?shù)組
    char strs[4][10] = {"java", "javascript", "c", "c++"};
    // 1.1通過 for 循環(huán)
    for (int i = 0; i < 4; i++) {
        printf("%s\t", strs[i]);
    }
    printf("\n");
    // 1.2通過 while 循環(huán)
    int i = 0;
    while (i < 4) {
        printf("%s\t", *(strs + i));
        i++;
    }
    printf("\n");

    // 2.一維字符指針數(shù)組聲明的字符串?dāng)?shù)組
    char *strs2[4] = {"tom", "jack", "rose", "lily"};
    // 2.1通過 for 循環(huán)
    for (i = 0; i < 4; i++) {
        printf("%s\t", strs2[i]);
    }
    printf("\n");
    // 2.2通過 while 循環(huán)
    i = 0;
    while (i < 4) {
        printf("%s\t", *(strs2 + i));
        i++;
    }
}

到了這里,關(guān)于C語言零碎知識點之字符串?dāng)?shù)組的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 網(wǎng)絡(luò)層中一些零碎且易忘的知識點

    網(wǎng)絡(luò)層中一些零碎且易忘的知識點

    異構(gòu)網(wǎng)絡(luò):指傳輸介質(zhì)、數(shù)據(jù)編碼方式、鏈路控制協(xié)議以及數(shù)據(jù)單元格式和轉(zhuǎn)發(fā)機制不同,異構(gòu)即物理層和數(shù)據(jù)鏈路層均不同 虛電路:網(wǎng)絡(luò)層可以向傳輸層提供兩種類型的服務(wù),面向連接的服務(wù)稱為虛電路服務(wù),而無連接的服務(wù)稱為數(shù)據(jù)報服務(wù)。虛電路的想法是避免為發(fā)送的

    2024年02月15日
    瀏覽(23)
  • 傳輸層中一些零碎且易忘的知識點

    傳輸層中一些零碎且易忘的知識點

    端口號:共兩個字節(jié) 不同類型的端口號: 服務(wù)端端口號 熟知端口號:0~1023 登記端口號:1024~49151 客戶端使用端口號(短暫/臨時端口號):49152~65535 要記得常見應(yīng)用程序的熟知端口號 FTP:21 TELNET:23 SMTP:25 DNS:53 TFTP:69 HTTP:80 SNMP:161 首部與偽首部: 偽首部中協(xié)議字

    2024年02月15日
    瀏覽(31)
  • 數(shù)據(jù)鏈路層中一些零碎且易忘的知識點

    數(shù)據(jù)鏈路層中一些零碎且易忘的知識點

    差錯控制 差錯的種類: 位錯(比特錯):0變1、1變0(這類差錯是本節(jié)所探討的差錯) 幀錯:幀丟失、幀重復(fù)、幀失序(這類差錯只在提供可靠傳輸?shù)臄?shù)據(jù)鏈路層中才進行修復(fù)) 要記的編碼(數(shù)據(jù)鏈路層可使用只檢測差錯的編碼,也可使用糾錯編碼) 檢錯編碼: 奇偶校驗碼

    2024年02月15日
    瀏覽(44)
  • 【webpack】一些零碎的知識點記錄:eslint配置、source-map配置、devServer配置

    有些知識點不知道咋歸類,就先暫時放在同一個文章里了。這里只記錄配置方式,配置的東西是什么就不過多解釋了,因為一般需要配置這些東西的也都了解是什么了。 一般在用cli創(chuàng)建vue工程或者cra創(chuàng)建react工程的時候,會默認(rèn)幫你安裝,webpack會自動幫你配置好,我也比較推

    2024年02月13日
    瀏覽(27)
  • C語言中的字符串輸入(gets_s、fgets、scanf、fscanf)與相關(guān)內(nèi)存分配知識

    C語言中的字符串輸入(gets_s、fgets、scanf、fscanf)與相關(guān)內(nèi)存分配知識

    0. C語言的內(nèi)存分配知識 分配內(nèi)存空間有兩種方式:靜態(tài)內(nèi)存分配和動態(tài)內(nèi)存分配 0.1 靜態(tài)內(nèi)存分配 指的是在編譯時確定數(shù)組等數(shù)據(jù)類型的大小,然后由計算機分配好,通常是存在棧上的數(shù)據(jù) 例如:在聲明數(shù)組時,需要顯示的指明數(shù)組的大小 0.2 動態(tài)內(nèi)存分配 通俗一點就是向

    2024年02月11日
    瀏覽(20)
  • 【知識點隨筆分享 | 第二篇】眾多的字符集

    【知識點隨筆分享 | 第二篇】眾多的字符集

    目錄 前言: 字符與字符集: 字符集編碼的發(fā)展(時間順序): 總結(jié): ?????????你是否有好奇過文字是怎么在電腦中顯示出來的?為什么我們通過輸入法就可以輸入想要得到的文字?為什么我們粘貼有些網(wǎng)站的文字,復(fù)制到自己的電腦上就成亂碼?為什么我們有的時候

    2024年02月14日
    瀏覽(20)
  • MySQL 知識點分享一:utf8 字符集和排序規(guī)則

    我們經(jīng)常能在數(shù)據(jù)庫中看到這些: utf8mb4 和 utf8, utf8mb4_unicode_ci, utf8mb4_general_ci, utf8mb4_bin 分別代表什么意思呢? 其實他們表示的是字符集 和 排序規(guī)則 字符集:就是用來定義字符在數(shù)據(jù)庫中的編碼的集合。 排序規(guī)則:用來定義比較字符串的方式。 字符集和排序規(guī)則是一對多的關(guān)

    2024年02月07日
    瀏覽(29)
  • C語言知識點匯總

    C語言知識點匯總

    C語言知識點保姆級總結(jié),這不得進你的收藏夾吃灰?! 拖了很久的C語言所學(xué)知識的簡單小結(jié),內(nèi)容有點多,第一次總結(jié)也可能有錯誤或者不全面,歡迎隨時補充說明! ? 用不同數(shù)據(jù)類型所定義的變量所占空間大小不一樣,定義的變量不是保存于數(shù)據(jù)類型中,而是因為只有

    2024年01月23日
    瀏覽(26)
  • [知識點整理]中科院/國科大 自然語言處理nlp 期末考試知識點整理

    [知識點整理]中科院/國科大 自然語言處理nlp 期末考試知識點整理

    本文為2022秋網(wǎng)安學(xué)院的自然語言處理課程期末復(fù)習(xí)知識點整理,水平有限,整理的答案可能有錯誤或遺漏,歡迎大家指正。 文章的第二部分內(nèi)容參考了學(xué)校學(xué)姐的文章,文章寫的很好,大家可以關(guān)注她: (133條消息) 【一起入門NLP】中科院自然語言處理期末考試*總復(fù)習(xí)*:考

    2024年02月09日
    瀏覽(35)
  • 計算機語言知識點梳理

    python是一門強類型、動態(tài)型、解釋型語言語言 JavaScript是一門弱類型、動態(tài)性、解釋型語言 typescript是一門強類型、靜態(tài)型、編譯型語言 Java是一門強類型、靜態(tài)型、編譯型語言 變量大小寫區(qū)分 html css sql java javascript python typescript c 弱類型語言和強類型語言 強類型語言也稱為強

    2024年02月09日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包