初學c語言15(字符和字符串函數)

一.字符串分類函數

頭文件:ctype.h

作用:判斷是什么類型的字符

函數舉例:

函數

符合條件就為真

islower判斷是否為小寫字符(a~z)
isupper判斷是否為大寫字符(A~Z)
isdigit十進制數字,(0~9)字符
isxdigit16進制數字,十進制數字字符,大寫A~Z,小寫a~z
isspace空白字符(空白換行等)
iscntrl任何控制字符
isalpha字母a~z,A~Z
isalnum字母和數字
ispunct標點符號
isgrape任何圖形字符
isprint

任何可打印字符

應用舉例:

代碼1(islower):

#include <stdio.h> //將字符串中的小寫轉換為大寫(普通)
#include <ctype.h>
int main()
{int i = 0;char arr[] = "I am from China";while (arr[i]){if (islower(arr[i]))arr[i] -= 32;printf("%c", arr[i]);i++;}return 0;
}

運行結果:

二.字符轉化函數

1.tolower

將大寫轉化為小寫

2.toupper

將小寫轉化為大寫

應用:

代碼:

#include <stdio.h> 
#include <ctype.h>
int main()
{int i = 0;char arr[] = "I am from China";while (arr[i]){if (islower(arr[i]))arr[i] = toupper(arr[i]);printf("%c", arr[i]);i++;}return 0;
}

運行結果:

三.strlen的返回值

返回值為size_t類型的,為無符號類型(>=0)

舉例:

#include <stdio.h> 
#include <string.h>
int main()
{int arr[] = "hjf";int arr2[] = "hjfjdf";if ((strlen(arr) - strlen(arr2)) > 0)printff(">");elseprintff("<=");return 0;
}

結果和解釋:

1.strlen的模擬和實現(遞歸)

代碼:

#include <stdio.h> 
size_t my_strlen(char* pa)
{if (*pa == 0)return 0;elsereturn 1 + my_strlen(pa + 1);
}
int main()
{char arr2[] = "hjfjdf";printf("%zu", my_strlen(arr2));return 0;
}

結果:

四.strcpy

作用:字符串拷貝,拷貝到源頭的‘\0’為止

source:指針,指向源頭數據

destination:指針,指向目的地空間,拷貝源頭數據包括‘\0’

返回值:destination的首元素地址

頭文件:string.h

注意:目的地空間必須足夠大

舉例:

代碼:

#include <stdio.h> 
#include <string.h>
int main()
{char arr2[] = "hello";char arr1[] = "world";printf("%s", strcpy(arr2, arr1));return 0;
}

結果:

模擬和實現:

代碼:

#include <stdio.h> 
char* my_strcpy(char* des, const char* sou)
{char* ret = des;while (*des++ = *sou++){;}return ret;
}
#include <string.h>
int main()
{char arr2[] = "hello";char arr1[] = "world";printf("%s", my_strcpy(arr2, arr1));return 0;
}

結果:

五.strcat

與strcat參數、返回值一樣

作用:把source的字符串追加到destination后

舉例:

代碼:

#include <stdio.h> 
#include <string.h>
int main()
{char arr2[20] = "hello";char arr1[] = "world";printf("%s", strcat(arr2, arr1));return 0;
}

結果:

模擬和實現:

代碼:

#include <stdio.h> 
char* my_strcat(char* des, const char* sou)
{char* re = des;while (*des){des++;}while (*des++ = *sou++){;}return re;
}
int main()
{char arr2[20] = "hello";char arr1[] = "world";printf("%s", my_strcat(arr2, arr1));return 0;
}

結果和解釋:

六.strcmp(補充指針5)

模擬實現:

代碼:

#include <stdio.h>
int my_strcmp(char* str1, char* str2)
{while (*str1 == *str2){if (*str1 == '\0')return 0;str1++;str2++;}return *str1 - *str2;
}
int main()
{char arr[] = "abcd";char arr1[] = "ab";int ret = my_strcmp(arr, arr1);printf("%d", ret);return 0;
}

結果:

七.strncpy

形式:

功能:字符串拷貝,與strcpy相比,可以控制拷貝字符串數量

應用:

八.strncat

形式:

功能:與strcat相比,可以控制追加字符數量

應用:

九.strncmp

功能:與strncmp相比,可以控制比較字符的數量

十.strstr

形式:

功能:查str2指向的字符串在str1指向的字符串中第一次出現的位置

返回值:

如果找到了,返回第一次出現位置的指針

沒找到返回空指針

應用:

模擬實現:

代碼:

#include <stdio.h>
const char* my_strstr(const char* str1, const char* str2)
{char* p = str1;while (*p){char* S1 =p;char* S2 = str2;while (*S1 && *S2 && *S1==*S2){S1++;S2++;}if (*S2 == '\0')return p;p++;}return NULL;
}
int main()
{char arr[] = "abcdefccdef";char arr1[20] ="def";printf("%s",my_strstr(arr,arr1));return 0;
}

結果:

十一.strtok

形式:

功能:

1.分割字符串,根據delimiters參數中的分隔符將字符串分成多個子字符串

2.根據delimiters參數中的分格符會插入’\0‘替換分隔符的位置

參數:

str:??首次傳入帶分割的字符串,后續傳NULL,表示繼續分割同一個字符串

delimiters:分隔符

返回值:

成功時返回當前指向的字符串

沒有更多字符串時返回NULL

應用:

代碼:

#include <stdio.h>
#include <string.h>
int main()
{char arr[] = "192.110...211.231";char arr1[20] =".";for (char* p = strtok(arr, arr1);p != NULL;p = strtok(NULL, arr1)){printf("%s\n", p);}return 0;
}

結果:

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

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

相關文章

12-串口外設

一、串口外設的基本概述 1、基本定義 串口通信&#xff0c;通過在通信雙方之間以比特位&#xff08;bit&#xff09;的形式逐一發送或接收數據&#xff0c;實現了信息的有效傳遞。其通信方式不僅簡單可靠&#xff0c;而且成本很低。 2、stm32的串口 下面是兩個MCU的數據交互&…

NE555雙音門鈴實驗

1腳為地。通常被連接到電路共同接地。 2腳為觸發輸入端。 3腳為輸出端&#xff0c;輸出的電平狀態受觸發器的控制&#xff0c;而觸發器受上比較器6腳和下比較器2腳的控制。當觸發器接受上比較器A1從R腳輸入的高電平時&#xff0c;觸發器被置于復位狀態&#xff0c;3腳輸出低電…

Redis分布式鎖實現

概述 為什么要要分布式鎖 在并發編程中&#xff0c;我們通過鎖&#xff0c;來避免由于競爭而造成的數據不一致問題。 通常&#xff0c;我們以synchronized 、Lock來使用它。Java中的鎖&#xff0c;只能保證在同一個JVM進程內中執行 如果需要在分布式集群環境下的話&#xff0…

軟件設計師-錯題筆記-網絡基礎知識

1. 解析&#xff1a; 1.子網劃分相關知識&#xff1a; 在IPv4地址中&#xff0c;/27表示子網掩碼為255.255.255.224&#xff0c;它將一個C類網絡&#xff08;默認子網掩碼255.255.255.0&#xff09;進一步劃分 對于子網掩碼255.255.255.224&#xff0c;其對應的二進制為111…

Fine-Tuning Llama2 with LoRA

Fine-Tuning Llama2 with LoRA 1. What is LoRA?2. How does LoRA work?3. Applying LoRA to Llama2 models4. LoRA finetuning recipe in torchtune5. Trading off memory and model performance with LoRAModel ArgumentsReferences https://docs.pytorch.org/torchtune/ma…

python打卡day29

類的裝飾器 知識點回顧 類的裝飾器裝飾器思想的進一步理解&#xff1a;外部修改、動態類方法的定義&#xff1a;內部定義和外部定義 回顧一下&#xff0c;函數的裝飾器是 &#xff1a;接收一個函數&#xff0c;返回一個修改后的函數。類也有修飾器&#xff0c;類裝飾器本質上確…

十一、STM32入門學習之FREERTOS移植

目錄 一、FreeRTOS1、源碼下載&#xff1a;2、解壓源碼 二、移植步驟一&#xff1a;在需要移植的項目中新建myFreeRTOS的文件夾&#xff0c;用于存放FREERTOS的相關源碼步驟二&#xff1a;keil中包含相關文件夾和文件引用路徑步驟三&#xff1a;修改FreeRTOSConfig.h文件的相關…

2025 年十大網絡安全預測

隨著我們逐步邁向 2026 年&#xff0c;網絡安全領域正處于一個關鍵的轉折點&#xff0c;技術創新與數字威脅以前所未有的復雜態勢交織在一起。 地緣政治環境進一步加劇了這些網絡安全挑戰&#xff0c;國際犯罪組織利用先進的技術能力來追求戰略目標。 人工智能在這一不斷演變…

Mac 環境下 JDK 版本切換全指南

概要 在 macOS 上安裝了多個 JDK 后&#xff0c;可以通過系統自帶的 /usr/libexec/java_home 工具來查詢并切換不同版本的 Java。只需在終端中執行 /usr/libexec/java_home -V 列出所有已安裝的 JDK&#xff0c;然后將你想使用的版本路徑賦值給環境變量 JAVA_HOME&#xff0c;…

中級網絡工程師知識點6

1.堆疊方式可以共享使用交換機背板帶寬&#xff1b;級聯方式可以使用雙絞線將交換機連接在一起 2.光功率計是專門測量光功率大小的儀器&#xff0c;在對光纜進行檢測時&#xff0c;通過在光纜的發送端和接收端分別測量光功率&#xff0c;進而計算出光衰情況。 3.光時域反射計…

動態規劃——烏龜棋

題目描述 解題思路 首先這是一個很明顯的線性dp的題目&#xff0c;很容易發現規律 數據輸入 我們用 h[ N ] 數組存儲每一個格子的分數 用 cnt [ ]&#xff0c;數組表示每一中卡片的數目 1&#xff0c;狀態表示 因為這里一個有4種跳躍方式可以選擇 f[ i ][ a ][ b ][ c ][ d…

C#自定義控件-實現了一個支持平移、縮放、雙擊重置的圖像顯示控件

1. 控件概述 這是一個繼承自 Control 的自定義控件&#xff0c;主要用于圖像的顯示和交互操作&#xff0c;具有以下核心功能&#xff1a; 圖像顯示與縮放&#xff08;支持鼠標滾輪縮放&#xff09;圖像平移&#xff08;支持鼠標拖拽&#xff09;視圖重置&#xff08;雙擊重置…

C++ map multimap 容器:賦值、排序、大小與刪除操作

概述 map和multimap是C STL中的關聯容器&#xff0c;它們存儲的是鍵值對(key-value pairs)&#xff0c;并且會根據鍵(key)自動排序。兩者的主要區別在于&#xff1a; map不允許重復的鍵multimap允許重復的鍵 本文將詳細解析示例代碼中涉及的map操作&#xff0c;包括賦值、排…

AI Agent開發第70課-徹底消除RAG知識庫幻覺(4)-解決知識庫問答時語料“總重復”問題

開篇 “解決知識庫幻覺”系列還在繼續,這是因為:如果只是個人玩玩,像自媒體那些說的什么2小時搭一個知識庫+deepseek不要太香一類的RAG或者是基于知識庫的應用肯定是沒法用在企業級落地上的。 我們真的經歷過或者正在經歷的人都是知道的,怎么可能2小時就搭建完成一個知識…

【DAY22】 復習日

內容來自浙大疏錦行python打卡訓練營 浙大疏錦行 仔細回顧一下之前21天的內容 作業&#xff1a; 自行學習參考如何使用kaggle平臺&#xff0c;寫下使用注意點&#xff0c;并對下述比賽提交代碼 kaggle泰坦里克號人員生還預測

【Docker】Docker Compose方式搭建分布式協調服務(Zookeeper)集群

開發分布式應用時,往往需要高度可靠的分布式協調,Apache ZooKeeper 致力于開發和維護開源服務器&#xff0c;以實現高度可靠的分布式協調。具體內容見zookeeper官網。現代應用往往使用云原生技術進行搭建,如何用Docker搭建Zookeeper集群,這里介紹使用Docker Compose方式搭建分布…

若依框架Consul微服務版本

1、最近使用若依前后端分離框架改造為Consul微服務版本 在這里分享出來供大家參考 # Consul微服務配置參數已經放置/bin/Consul微服務配置目錄 倉庫地址&#xff1a; gitee&#xff1a;https://gitee.com/zlxls/Ruoyi-Consul-Cloud.git gitcode&#xff1a;https://gitcode.c…

BOM知識點

BOM&#xff08;Browser Object Model&#xff09;即瀏覽器對象模型&#xff0c;是用于訪問和操作瀏覽器窗口的編程接口。以下是一些BOM的知識點總結&#xff1a; 核心對象 ? window&#xff1a;BOM的核心對象&#xff0c;代表瀏覽器窗口。它也是全局對象&#xff0c;所有全…

什么是遷移學習(Transfer Learning)?

什么是遷移學習&#xff08;Transfer Learning&#xff09;&#xff1f; 一句話概括 遷移學習研究如何把一個源領域&#xff08;source domain&#xff09;/源任務&#xff08;source task&#xff09;中獲得的知識遷移到目標領域&#xff08;target domain&#xff09;/目標任…

[創業之路-362]:企業戰略管理案例分析-3-戰略制定-華為使命、愿景、價值觀的演變過程

一、華為使命、愿景、價值觀的演變過程 1、創業初期&#xff08;1987 - 1994 年&#xff09;&#xff1a;生存導向&#xff0c;文化萌芽 使命愿景雛形&#xff1a;1994年華為提出“10年之后&#xff0c;世界通信行業三分天下&#xff0c;華為將占一份”的宏偉夢想&#xff0c…