C語言——字符函數和字符串函數(一)

📝前言:
這篇文章對我最近學習的有關字符串的函數做一個總結和整理,主要講解字符函數和字符串函數(strlen,strcpy和strncpy,strcat和strncat)的使用方法,使用場景和一些注意事項(附上實例)

🎬個人簡介:努力學習ing
📋個人專欄:C語言入門基礎
🎀CSDN主頁 愚潤求學
🌄每日雞湯:生活在自己的光里,不斷吹飲內心的火焰


文章目錄

  • 一,字符分類函數
    • 1,使用實例(islower)
  • 二,字符轉換函數
  • 三,函數strlen
    • 1,基本介紹
    • 2,使用注意事項
  • 四,strcpy和strncpy
    • 1,strcpy
    • 2,strncpy
  • 五,strcat和strncat
    • 1,strcat
    • 2,strncat

一,字符分類函數

📋C語言里提供一系列的函數專門用于字符分類,便于我們**判斷一個字符是屬于什么類型的字符**👇🏻
在這里插入圖片描述
如islower:

int islower(int c)
islower就會判斷參數部分的c是否是小寫字母(字符→ASCII值)

1,使用實例(islower)

●這些函數的使用方法非常類似,一下對其中的islower做使用的展示👇🏻

代碼作用:用islower判斷字符后,將小寫的字母轉換為大寫,其他字符不變

#include<stdio.h>
#include<ctype.h>
int main()
{char str[] = "Test Islower.";int sz = sizeof(str) / sizeof(str[0]);for (int i = 0; i < sz; i++) //用for循環,因為一次只能判斷一個字符{if (islower(str[i]))  //判斷是否為小寫,小寫就加入if語句{str[i] = str[i] - 32;  //將小寫轉換為大寫}putchar(str[i]);  //輸出字符}return 0;
}

輸出結果👇🏻

這里是引用

二,字符轉換函數

下面介紹兩種可以實現大小寫之間互相轉化的函數👇🏻

1,int tolower(int c);大寫字母轉換為小寫字母
2,int toupper(int c);小寫字母轉換為大寫字母

在上一個用islower判斷大小寫后,我們是通過小寫字符-32的形式來轉化為大寫字符的,這次我們使用toupper函數來實現轉換👇🏻

#include<stdio.h>
#include<ctype.h>
int main()
{char str[] = "Test Islower.";int sz = sizeof(str) / sizeof(str[0]);for (int i = 0; i < sz; i++){if (islower(str[i]))  {toupper(str[i]);  //使用toupper函數}putchar(str[i]);  }return 0;
}

輸出結果👇🏻

這里是引用

三,函數strlen

用來計算字符串的長度

1,基本介紹

我們來看一下C語言官網對它的介紹👇🏻
在這里插入圖片描述

●原文:C字符串的長度是由終止空字符決定:C字符串的長度等于字符串開頭和終止字符之間的字符數(但不包括終止字符本身)
●通俗來講就是:字符串開頭到\0之前字符的個數

2,使用注意事項

🔍但是這也造成了strlen的“固執”,strlen只有遇到\0才會停止查找,否則就會一直查找

請看下面的代碼👇🏻

#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = "abcde";char arr2[] = { 'a','b','c','d','e'};printf("%d\n", strlen(arr1));printf("%d\n", strlen(arr2));return 0;
}

運行結果👇🏻

這里是引用
?結果不一樣就是因為strlen在arr2的未知位置才找到了\0
arr1數組中存放的是:a b c d e \0程序自動在字符串后面補充了\0
arr2數組中存放的是:a b c d e 沒有\0,因此strlen會一直找\0找到才停止,輸出結果 33 其實是一個隨機值(剛好strlen在內存里找到了\0

四,strcpy和strncpy

頭文件:<string.h>
作用:復制字符串

1,strcpy

我們先來看strcmp👇🏻
在這里插入圖片描述

函數原型:char* strcpy(char* destination, const char* source);

●對重要的內容解讀一下與數理:
1,原字符串必須以\0結尾,函數復制完\0以后就會停止
2,目標空間要足夠大,要存放的下所要復制的字符串
3,目標空間必須可修改(比如:字符數組可以修改,但是,常量字符串就是不能修改的)

實例👇🏻
在這里插入圖片描述

但是,如果源字符里有\0,則復制完\0就會停止👇🏻
在這里插入圖片描述

2,strncpy

和strcpy的區別就是多了一個n→num(復制的字符的個數)

char* strncpy(char* destination, const char* source, size_t num);

在這里插入圖片描述
復制num個字符從源字符串到目標空間
●如果num>源字符串長度,則復制完源字符串后,目標后面追加0,直到num個
👇🏻
在這里插入圖片描述
可以觀察到:
num的限制就是剛好復制num個字符,并且沒有更改目標空間原來后面的內容

五,strcat和strncat

頭文件:<string.h>
作用:連接字符串

1,strcat

在這里插入圖片描述

?提煉一下:
源字符串必須以\0結尾,函數追加完\0以后就會停止
●從目標中的終止空字符串開始覆蓋(目標字符串也必須以\0結尾,因為目標字符串的\0就是開始追加的位置,這個\0會被覆蓋掉)
目標空間要足夠大(>(目標字符串+源字符串)的大小)
目標空間必須可以修改

實例👇🏻
![在這里插入圖片描述](https://img-blog.csdnimg.cn/direct/3734b3c50102440fb3cdb47ba1ba5bd7.png
可見,源字符串中間有空字符也不會停止

2,strncat

在這里插入圖片描述
?區別:
●從源字符串追加num個字符到目標字符串的末尾,追加完以后再追加一個\0
●如果num>源字符串長度,則只會將源字符串中\0之前的內容追加到目標字符串的末尾**

實例👇🏻
在這里插入圖片描述


🌈我的分享也就到此結束啦🌈
要是我的分享也能對你的學習起到幫助,那簡直是太酷啦!
若有不足,還請大家多多指正,我們一起學習交流!
📢公主,王子:點贊👍→收藏?→關注🔍
感謝大家的觀看和支持!祝大家都能得償所愿,天天開心!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211310.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211310.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211310.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python常見庫的匯總

python常見庫 一、爬蟲二、界面開發三、圖片處理四、視頻處理、視頻剪輯五、音頻處理六、數據處理七、數據庫八、網頁開發九、神經學習、AI開發十、打包十一、Excel處理十二、微信十三、控制鼠標鍵盤十四、手柄十五、控制外設十六、郵箱十七、短信 一、爬蟲 Requests&#xff…

Java入門項目--螞蟻愛購

簡介 這是一個靠譜的Java入門項目實戰&#xff0c;名字叫螞蟻愛購。 從零開發項目&#xff0c;視頻加文檔&#xff0c;十天就能學會開發JavaWeb項目&#xff0c;教程路線是&#xff1a;搭建環境> 安裝軟件> 創建項目> 添加依賴和配置> 通過表生成代碼> 編寫Ja…

解鎖MySQL的威力:針對常見問題的快速解決指南

數據庫和表的創建 創建數據庫&#xff1a; CREATE DATABASE IF NOT EXISTS MyDatabase; USE MyDatabase;案例&#xff1a; 想象您要開始一個博客項目。首先&#xff0c;您需要一個地方來存儲所有的文章和用戶信息。上述命令幫助您創建了這樣一個存儲空間&#xff0c;名為MyDa…

Tomcat使用https方式連接

Tomcat使用https方式連接 攏共分兩步&#xff0c;第一步&#xff1a;生成密鑰。第二步&#xff1a;修改配置。 第一步&#xff1a;生成密鑰。 keytool -genkey -v -alias tomcat -keyalg RSA -validity 365 -keystore /usr/tomcat-8.5/conf/tomcat.keystore第二步&#xff1…

RocketMQ-源碼架構二

梳理一些比較完整&#xff0c;比較復雜的業務線 消息持久化設計 RocketMQ的持久化文件結構 消息持久化也就是將內存中的消息寫入到本地磁盤的過程。而磁盤IO操作通常是一個很耗性能&#xff0c;很慢的操作&#xff0c;所以&#xff0c;對消息持久化機制的設計&#xff0c;是…

華為機試真題 C++ 實現【字符串重新排列】

題目 給定一個字符串s&#xff0c;s包括以空格分隔的若干個單詞&#xff0c;請對s進行如下處理后輸出&#xff1a; 1、單詞內部調整&#xff1a;對每個單詞字母重新按字典序排序 2、單詞間順序調整&#xff1a; 1&#xff09;統計每個單詞出現的次數&#xff0c;并按次數降序…

蒙特霍爾問題(選擇三扇門后的車與羊)及其貝葉斯定理數學解釋

1. 蒙特霍爾問題 有一個美國電視游戲節目叫做“Let’s Make a Deal”&#xff0c;游戲中參賽者將面對3扇關閉的門&#xff0c;其中一扇門背后有一輛汽車&#xff0c;另外兩扇門后是山羊&#xff0c;參賽者如果能猜中哪一扇門后是汽車&#xff0c;就可以得到它。 通常&#xf…

筆記68:Pytorch中repeat函數的用法

repeat 相當于一個broadcasting的機制 repeat(*sizes) 沿著指定的維度重復tensor。不同與expand()&#xff0c;本函數復制的是tensor中的數據。 import torch import torch.nn.functional as F import numpy as np a torch.Tensor(128,1,512) B a.repeat(1,5,1) print(B.s…

OpenGL 著色器程序的保存和加載(二進制)

背景 為了提高OpenGL 著色器程序的編譯和鏈接速度&#xff0c;我們可以將程序保存為二進制進行加載&#xff0c;可以大幅度提升加載效率。 方法 以下是加載和保存二進制程序的方法。 // 加載著色器程序的二進制文件到已創建的著色器程序中 bool loadPragram(const std::str…

javaee實驗:文件上傳及攔截器的使用

目錄 文件上傳ModelAttribute注解實驗目的實驗內容實驗過程項目結構編寫代碼結果展示 文件上傳 Spring MVC 提供 MultipartFile 接口作為參數來處理文件上傳。 MultipartFile 提供以下方法來獲取上傳的文件信息&#xff1a; ? getOriginalFilename 獲取上傳的文件名字&#x…

華為OD機試真題-測試用例執行計劃-2023年OD統一考試(C卷)

題目描述: 某個產品當前迭代周期內有N個特性( F1,F2,.......FN)需要進行覆蓋測試,每個特性都被評估了對應的優先級,特性使用其ID作為下標進行標識。 設計了M個測試用例(T1,T2......,TM ),每個用例對應了一個覆蓋特性的集合,測試用例使用其ID作為下標進行標識,測試用例…

特權FPGA學習筆記

C/C/system C-----vivado HLS------------->RTL門電路&#xff0c;省去了HDL語言的中間轉換&#xff0c;可以看作是C向C#的演進&#xff0c;基于zynq面向以前使用C的開發人員&#xff0c;但是個人覺得&#xff0c;HDL存在且未被C取代&#xff0c;工具的著眼點就是面向底層調…

Spring Cloud 與微服務學習總結(19)—— Spring Cloud Alibaba 之 Nacos 2.3.0 史上最大更新版本發布

Nacos 一個用于構建云原生應用的動態服務發現、配置管理和服務管理平臺,由阿里巴巴開源,致力于發現、配置和管理微服務。說白了,Nacos 就是充當微服務中的的注冊中心和配置中心。 Nacos 2.3.0 新特性 1. 反脆弱插件 Nacos 2.2.0 版本開始加入反脆弱插件,從 2.3.0 版本開…

飛天使-linux操作的一些技巧與知識點2

TCP 的三次握手 第一次&#xff0c;客戶端與服務端建立鏈接&#xff0c;需要發送請求連接的消息 第二次&#xff0c;服務端接口到數據后&#xff0c;返回一個確認的操作*&#xff08;至此客戶端和服務端鏈路建立成功&#xff09; 第三次&#xff0c;服務端還需要發送要與客戶端…

【Linux】探索Linux進程狀態 | 僵尸進程 | 孤兒進程

最近&#xff0c;我發現了一個超級強大的人工智能學習網站。它以通俗易懂的方式呈現復雜的概念&#xff0c;而且內容風趣幽默。我覺得它對大家可能會有所幫助&#xff0c;所以我在此分享。點擊這里跳轉到網站。 目錄 一、進程狀態1.1運行狀態1.2阻塞狀態1.3掛起狀態 二、具體L…

React中使用react-json-view展示JSON數據

文章目錄 一、前言1.1、在線demo1.2、Github倉庫 二、實踐2.1、安裝react-json-view2.2、組件封裝2.3、效果2.4、參數詳解2.4.1、src(必須) &#xff1a;JSON Object2.4.2、name&#xff1a;string或false2.4.3、theme&#xff1a;string2.4.4、style&#xff1a;object2.4.5、…

[ROS2] --- service

1 service介紹 1.1 service概念 話題通信是基于訂閱/發布機制的&#xff0c;無論有沒有訂閱者&#xff0c;發布者都會周期發布數據&#xff0c;這種模式適合持續數據的收發&#xff0c;比如傳感器數據。機器人系統中還有另外一些配置性質的數據&#xff0c;并不需要周期處理&…

C#,圖算法——以鄰接節點表示的圖最短路徑的迪杰斯特拉(Dijkstra)算法C#程序

1 文本格式 using System; using System.Text; using System.Linq; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer.Algorithm { public class Node // : IComparable<Node> { private int vertex, weigh…

第7章-使用統計方法進行變量有效性測試-7.5.4-模型評估

目錄 混淆矩陣 準確率 定義 局限性 精準率 定義 局限性

【分布式微服務專題】從單體到分布式(一、SpringCloud項目初步升級)

目錄 前言閱讀對象閱讀導航前置知識筆記正文一、單體服務介紹二、服務拆分三、分布式微服務升級前的思考3.1 關于SpringBoot/SpringCloud的思考【有點門檻】 四、SpringCloud升級整合4.1 新建父子項目 學習總結感謝 前言 從本節課開始&#xff0c;我將自己手寫一個基于SpringC…