一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - c語言中字符串與字符串數組詳解

c語言中字符串與字符串數組詳解

2022-02-25 14:46crazy_zhangcong C/C++

在C語言當中,字符串數組可以使用char a[] [10]; 或者char *a[]; 表示,下面這篇文章主要給大家介紹了關于c語言中字符串與字符串數組的相關資料,需要的朋友可以參考下

字符串

  • 用雙引號引起來的就是字符串,字符串由字符組成
  • 字符串使用%s格式化輸出
  • 字符串以\0結尾,沒有\0就不是字符串
  • 只要是用雙引號括起來的都是字符串
  • 字符串的本質就是數組
    注意: 字符串變量和普通的字符數組有一定的區別,C語言規定,字符串必須以\0結尾(作為字符串的結束符號),所以字符串變量的元素個數比字符數組的元素多一個\0
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
 
int main(int argc, const char * argv[]) {
    
    char name[] = "zhangsan";
    
    // %u 表示無符號,sizeof 返回的是一個無符號長整型
    printf("name --> %s  size --> %lu\n", name, sizeof(name));      // name --> zhangsan  size --> 9
    
    // 字符串本質就是一個字符數組,前提是末尾以\0結尾
    char name1[] = {'z', 'h', 'a', 'n', 'g', 's', 'a', 'n', '\0'};
    printf("name1 --> %s\n", name1);    // name1 --> zhangsan
    
    // 部分初始化中,沒有被初始化的元素默認是0, \0 對應的ASCII值是 0
    char name2[9] = {'z', 'h', 'a', 'n', 'g', 's', 'a', 'n'};
    printf("name2 --> %s\n", name2);    // name2 --> zhangsan
    
    // 字符串的本質就是數組
    char name3[] = "lisi";
    printf("name3 --> %s \n", name3);   // name3 --> lisi
    name3[0] = 'x';
    printf("name3 --> %s \n", name3);   // name3 --> xisi
   
 
    return 0;
}

字符串輸出

字符串輸出可以使用printf 和 puts 進行輸出,各有利弊

- 輸出字符串
 - 使用printf的%s占位符輸出
  - 弊端:如果想要換行,必須加上\n
  - 優點:可以自定義格式化需要的字符串,也就是可以按照我們需要的格式來輸出
 - 使用puts函數進行輸出
  - 優點:可以自動換行
  - 缺點:不可以自定義格式,只能原樣輸出

?
1
2
3
4
5
6
7
8
9
// printf
char str[] = “lisi”;
printf(“name = %s!!!\n”, str);
printf("-----\n");
 
// puts
// 自動換行,只能原樣輸出
puts(str);
printf("----\n");

#### 字符串輸入

字符串輸入可以使用 scanf 和 gets 進行輸入,各有利弊

輸入字符串

  • 使用scanf的%s占位符接收鍵盤輸入的字符串
    • scanf 接收字符串,會以空格,tab,回車作為結束符號,利用scanf接收字符串時,字符串不能出現空格,tab,回車
  • 使用gets接收字符串
?
1
2
3
4
5
6
7
8
9
10
11
12
// scanf
printf("請輸入一個字符串:\n");
char buf[10];
scanf("%s", buf);   // 輸入:fdsa fdas
printf("buf --> %s\n", buf);    // buf --> fdsa
 
 
// gets
char buf[10];
printf("請輸入一個字符串,使用gets接收:\n");
gets(buf);
printf("buf --> %s\n", buf);    // buf --> fdsaf fdsa

字符串常用方法

計算字符串的長度

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <string.h>
 
// 申明函數
int stringLen(char value[]);
 
 
int main(int argc, const char * argv[]) {
    
    char string[] = "zhangsan";
    
    // 計算字符串的長度,不包括末尾\0的長度
    
    // 調用系統內置函數strlen 計算字符串的長度,需要先導入 string.h 頭文件
    size_t length = strlen(string);     // lenght --> 8
    printf("lenght --> %lu\n", length);
    
    
    // 自定義計算字符串長度的函數
    int length2 = stringLen(string);
    printf("length2 --> %i\n", length2);    // length2 --> 8
    return 0;
}
 
// 自定義計算字符串長度的函數
int stringLen(char value[]) {
    int count = 0;
    while (value[count] != '\0') {
        count ++;
    }
    return count;
}

字符串拼接

使用內置方法strcat進行2個字符串拼接,將后者拼接到前者后面,前提是前者空余的長度要大于后者的長度,否則會報錯

使用內置方法strncat進行2個字符串拼接,可以指定將后者的前多少個字符與前者進行拼接

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 字符串拼接
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 可以指定將后者的前多少個字符與前者進行拼接
strncat(str1, str2, 3);     // 最后一個參數3表示指定str2的前多少個字符拼接到str1后面
printf("str1拼接后 --> %s\n", str1);        // str1拼接后 --> hello world wo
printf("str2拼接后 --> %s\n", str2);        // str2拼接后 -->  world

字符串拷貝

strcpy 函數會將源的數據拷貝到目錄中,并且會覆蓋掉目標中原有的數據,目標的長度必須能夠存放拷貝的數據,長度不夠會報錯

strncpy 函數在strcpy函數的基礎之上,增加一個參數,可以指定拷貝幾個字符0

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 將str2中的內容拷貝到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 函數在strcpy函數的基礎之上,增加一個參數,可以指定拷貝幾個字符
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 會對傳入的字符串進行比較,比較完畢后會返回一個整型的值

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
    int result = strcmp(str1, str2)
    如果result等于0,證明兩個字符串相等
    如果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

字符串數組

如果想存儲一堆字符串可以使用字符串數組,字符串數組就是二維數組

?
1
2
3
4
5
char names[5][20] = {
    "zhangsan",
    "lisi",
    "wangwu",
}

總結

到此這篇關于c語言中字符串與字符串數組的文章就介紹到這了,更多相關c語言字符串與字符串數組內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/crazy_zhangcong/article/details/88112493

延伸 · 閱讀

精彩推薦
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
主站蜘蛛池模板: 91噜噜噜在线观看 | 亚洲国产情侣一区二区三区 | 秋霞色 | 香蕉91 | 拔插拔插8x8x海外华人免费视频 | 99re精品在线| 天堂欧美| 92精品国产成人观看免费 | 男同志与动人物zozotv | 美味情缘韩国在线观看视频 | 久久视频在线视频观看精品15 | 美女福利视频一区二区 | 欧美精品亚洲精品日韩专区va | 成人精品第一区二区三区 | 国产伦精品一区二区三区免费迷 | 色综七七久久成人影 | 久久综合老色鬼网站 | 国产果冻传媒 | 视频在线91 | 亚洲人影院 | 交欧美| 插入肥臀| 日本人黄色 | 青草久久精品亚洲综合专区 | 久久精品嫩草影院免费看 | 国产精品视频久久久 | 黑人巨大爆粗亚裔女人 | 成年人视频在线 | 妇伦小说| 8x8拨擦拨擦华人免费 | 国产精品视频色拍拍 | 丝瓜黄瓜茄子西红柿秋葵榴莲 | 亚洲国产成人久久综合一区77 | 国产精品嫩草影院一二三区入口 | 色综合中文字幕天天在线 | 久久香蕉国产免费天天 | 精品推荐国产麻豆剧传媒 | hd在线观看免费高清视频 | 久久久WWW免费人成精品 | 欧美亚洲另类综合 | 亚洲精品卡一卡2卡3卡4卡 |