C語言-字符串操作函數-附加使用方式

文章目錄

  • 前言
    • 字符串復制-strcpy
    • 字符串復制(按照位數)-strncpy
    • 字符串比較-strcmp
    • 字符串比較(按照位數)-strncmp
    • 不區分大小寫的字符串比較-strcasecmp
    • 不區分大小寫的比較(前n位)-strncasecmp
    • 字符串按照格式寫入-sprintf
    • 字符串按照格式和個數寫入-snprintf
    • 字符串拼接-strcat
    • 字符串拼接(前n位)-strncat
    • 字符串切割-strtok
    • 字符串切割-strsep
    • 查找字符串是否在另一個字符串中-strstr
    • 查找字符串是否在另一個字符串中-不區分大小寫-strcasestr
    • 查找某個字符是否在字符串中-strchr
    • 字符串轉數字-atoi
    • 在字符串提取前面的數字字符并轉換成數字(根據參數選擇轉換后的數字類型)-strtoul
    • 判斷字符是否為空-isspace
    • 檢查字符是否是十進制數字字符-isdigit

前言

當前文檔為C語言字符串的基本操作(用過的以及man時發現的),用于本人記錄使用,會持續更新

字符串復制-strcpy

#include <string.h>
char *strcpy(char *dest, const char *src);// 將后面的變量賦值給前面
// 函數返回一個指向目標字符串dest的指針。
// 需要注意前面變量的長度,要大于等于 后面的長度,要不然編譯報警告,還容易越界后報錯

字符串復制(按照位數)-strncpy

#include <string.h>
char *strncpy(char *dest, const char *src, size_t n);// 將后面的字符串賦值給前面的字符串 復制 n 個
// 函數返回一個指向目標字符串dest的指針。

字符串比較-strcmp

#include <string.h>
int strcmp(const char *s1, const char *s2);// 字符串比較,完整比較
// 比較方式為 按照字符串每個字符的ASCII碼按位比較,不相同時,前面的大 返回 大的數,后面的大,返回負的少的個數

字符串比較(按照位數)-strncmp

#include <string.h>
int strncmp(const char *s1, const char *s2, size_t n);// 前后字符串比較,比較前n位,比較方式同上

不區分大小寫的字符串比較-strcasecmp

#include <strings.h>
int strcasecmp(const char *s1, const char *s2);// 不區分大小寫的比較,比較方式同上

不區分大小寫的比較(前n位)-strncasecmp

#include <strings.h>
int strncasecmp(const char *s1, const char *s2, size_t n);// 不區分大小寫的比較,比較前n位,比較方式同上

字符串按照格式寫入-sprintf

#include <stdio.h>
int sprintf(char *str, const char *format, ...);// 按照 中間的格式,將后面的變量 寫入到 前面的字符串中
char buf[128] = {0};
if(sprintf(buf,"%s: %d\n","name",18) > 0){//成功 返回 寫入的字符數
}else{//失敗返回 負數
}

字符串按照格式和個數寫入-snprintf

#include <stdio.h>
int snprintf(char *str, size_t size, const char *format, ...);// 按照中間格式,將后面的變量們,寫入到第一個變量中,寫入 size個
// 注意: size為最大限制個數,實際寫入最大個數為 size - 1 個,最后一位會被 寫入 '\0'
char buf[128] = {0};
if(snprintf(buf,32,"%s: %d\n","name",18) > 0){	//按照 %s: %d 格式將 name 跟 18 寫入到 buf中,最多寫入 32個//成功 返回 寫入的字符數
}else{//失敗返回 負數
}

字符串拼接-strcat

#include <string.h>
char *strcat(char *dest, const char *src);// 將src字符串 拼接到 dest 字符串中,替換dest的'\0'。需要注意dest字符串足夠大。

字符串拼接(前n位)-strncat

#include <string.h>
char *strncat(char *dest, const char *src, size_t n);// 將src字符串中的前n位 拼接到 dest 字符串中,替換dest的'\0'。需要注意dest字符串足夠大。

字符串切割-strtok

#include <string.h>
char *strtok(char *str, const char *delim);// 字符串切割,將str 按照 delim 樣式切割。將切割完的字符串的指針返回
// 第二次切割時,str 寫為 NULLint main(int argc, char const *argv[])
{char buf[128] = "this_is_test:name:qxy:age:200";char *temp = NULL;temp = strtok(buf,":");while(temp != NULL){printf("__<%s>\n",temp);temp = strtok(NULL,":");}return 0;
}

執行結果

字符串切割-strsep

#include <string.h>
char *strsep(char **stringp, const char *delim);// 字符串切割:將stringp 字符串 按照 字符 delim 進行切割
// 切割完 前面的部分 通過返回值返回,剩余部分 保存在 stringp 字符串中int main()
{char query[] ="this_is_test:name:qxy:age:200";char *q, *temp_q;q = query;printf("old_str is <%s>\n",query);temp_q = strsep(&q,":"); printf("[temp_q ] :<%s>\n", temp_q); //但是printf("[q] :<%s>\n", q);temp_q = strsep(&q,":"); printf("[2temp_q ] :<%s>\n", temp_q);printf("[2q] :<%s>\n", q);temp_q = strsep(&q,":");printf("[3temp_q ] :<%s>\n", temp_q);printf("[3q] :<%s>\n", q);return 0;
}

在這里插入圖片描述

查找字符串是否在另一個字符串中-strstr

#include <string.h>
char *strstr(const char *haystack, const char *needle);// 字符串查找,查找后面的字符串 是否在 前面的字符串中
// 沒找到返回 NULL
// 找到,返回查找字符串的在haystack字符串的第一位指針

查找字符串是否在另一個字符串中-不區分大小寫-strcasestr

#include <string.h>
char *strcasestr(const char *haystack, const char *needle);// 查找后面字符串 是否在 前面字符串中,不區分大小的的查找
// 沒找到返回 NULL
// 找到,返回查找字符串的在haystack字符串的第一位指針

查找某個字符是否在字符串中-strchr

#include <string.h>
char *strchr(const char *s, int c);// 函數返回一個指針,指向前面字符串中 最后一次出現的字符c 的位置
// 沒找到返回 NULL

字符串轉數字-atoi

#include <stdlib.h>
int ret = atoi(const char* buf);// 出錯返回 0

在字符串提取前面的數字字符并轉換成數字(根據參數選擇轉換后的數字類型)-strtoul

#include <stdlib.h>
int main(int argc, char const *argv[])
{char buf[128] = "         25036 HELLO_WORLD QXY";//char buf[128] = "        HELLO_WORLD QXY 2525252";    //這個不行.....printf("buf is <%s>\n",buf);char *temp = NULL;unsigned long int x = strtoul(buf,&temp,10);printf("x = <%lu>\n",x);printf("temp = <%s>\n",temp);printf("buf = <%s>\n",buf);return 0;
}

strtoul

unsigned long strtoul(const char nptr, char **endptr, int base);
strtoul()函數根據給定的基數將nptr中字符串的初始部分轉換為無符號長值,該值必須為介于2和36之間(包括2和36)或者是特殊值0。
基本上就是 0 2 8 10 16 (如果是 0 字符串以0x開頭就是16進制讀取,以0開頭 就是8進制,否則一律按十進制處理)
給定基數中的數字。(在10以上的base中,大寫或小寫字母“A”表示10,“B”表示11,依此類推 “Z”表示35。)
字符串可以以任意數量的空格 tab 開頭,后跟一個可選的“+”或“-”號。
字符串的剩余部分以顯而易見的方式轉換為無符號長值,在第一個無效字符處停止
如果endptr不為NULL,strtoul()將第一個無效字符的地址存儲在
endptr中。如果根本沒有數字,strtoul()將存儲endptr中nptr的原始值(并返回0)。特別是,如果返回時nptr不是“\0”,但**endptr是“\0”時,則整個字符串為有效的

strtoull()函數的工作原理與strtoul()函數類似,但返回一個無符號長-長值。

判斷字符是否為空-isspace

’ ’ (0x20) space (SPC) 空格符
‘\t’ (0x09) horizontal tab (TAB) 水平制表符
‘\n’ (0x0a) newline (LF) 換行符
‘\v’ (0x0b) vertical tab (VT) 垂直制表符
‘\f’ (0x0c) feed (FF) 換頁符
‘\r’ (0x0d) carriage return (CR) 回車符

#inlcude <ctype.h>
int ret = isspace(char c);//為空返回非0,不為空返回 0

檢查字符是否是十進制數字字符-isdigit

#inlcude <ctype.h>
int ret = isdigit(char c);//是一個數字,則該函數返回非零值,否則返回 0。

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

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

相關文章

JUC包(面試常問)

1. Callable接口 類似于Runnable接口&#xff0c;Runnable描述的任務&#xff0c;不帶返回值&#xff1b;Callable描述的任務帶返回值。 public class Test {//創建線程&#xff0c;計算12...1000public static void main(String[] args) throws ExecutionException, Interru…

js/jQuery常見操作 之各種語法例子(包括jQuery中常見的與索引相關的選擇器)

js/jQuery常見操作 之各種語法例子&#xff08;包括jQuery中常見的與索引相關的選擇器&#xff09; 1. 操作table常見的1.1 動態給table添加title&#xff08;指定td&#xff09;1.1.1 給td動態添加title&#xff08;含&#xff1a;獲取tr的第幾個td&#xff09;1.1.2 動態加工…

KWin、libdrm、DRM從上到下全過程 —— drmModeAddFBxxx(23)

接前一篇文章:KWin、libdrm、DRM從上到下全過程 —— drmModeAddFBxxx(22) 上一回講解了i915_gem_object_lookup_rcu函數的第1個參數struct drm_file *file,本回講解其第2個參數u32 handle。 (2)參數u32 handle 說起來,handle要比struct drm_file *file參數好理解多了…

怎么更改android的包名,使其可以變成另外一個app

在 Android 中更改應用的包名并不是一項簡單的任務&#xff0c;因為包名在應用的整個代碼和配置文件中都被廣泛使用。但是&#xff0c;你可以通過以下步驟來更改應用的包名&#xff1a; 注意&#xff1a;在更改包名之前&#xff0c;請確保備份你的項目&#xff0c;以防發生意外…

thinkphp 結合swoole 聊天開發實例

好的&#xff0c;下面我為您介紹使用ThinkPHP和Swoole開發聊天應用的實例。 環境搭建 首先需要安裝PHP和Swoole擴展&#xff0c;可以使用以下命令&#xff1a; yum install php php-devel php-pear pecl install swoole新建項目 使用composer新建一個ThinkPHP項目&#xff…

每日一練【三數之和】

一、題目描述 15. 三數之和 給你一個整數數組 nums &#xff0c;判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i ! j、i ! k 且 j ! k &#xff0c;同時還滿足 nums[i] nums[j] nums[k] 0 。請 你返回所有和為 0 且不重復的三元組。 注意&#xff1a;答案中不可…

【開題報告】基于SSM的校園體育管預約系統的設計與實現

1.選題背景 隨著社會的發展和人們對健康生活的追求&#xff0c;體育鍛煉在大學生群體中越來越受到重視。校園體育場館是大學生進行體育活動和鍛煉的主要場所之一。然而&#xff0c;由于校園體育場館資源有限&#xff0c;管理不善和預約流程繁瑣等問題&#xff0c;導致場館利用…

【數據結構(九)】線索化二叉樹(3)

文章目錄 1. 前言——問題引出2. 線索二叉樹的基本介紹3. 線索二叉樹的應用案例3.1. 思路分析3.2. 代碼實現 4. 遍歷線索化二叉樹4.1. 代碼實現 1. 前言——問題引出 問題&#xff1a; ????將數列 {1, 3, 6, 8, 10, 14 } 構建成一顆二叉樹. &#xff08;n17個空指針域&…

1688API接口系列,商品詳情數據丨搜索商品列表丨商家訂單類丨1688開放平臺接口使用方案

1688商品詳情接口是指1688平臺提供的API接口&#xff0c;用于獲取商品詳情信息。通過該接口&#xff0c;您可以獲取到商品的詳細信息&#xff0c;包括商品標題、價格、庫存、描述、圖片等。 要使用1688商品詳情接口&#xff0c;您需要先申請1688的API權限&#xff0c;并獲取ac…

老有所依:TSINGSEE青犀養老院智能視頻監管方案

養老院智能監控方案是為了提高養老院內老人的安全和護理質量&#xff0c;利用智能技術與監控設備進行全方位的監控和管理&#xff0c;可以加強對老人的監護和護理&#xff0c;提高養老院的服務質量和安全性。 旭帆科技基于視頻技術與AI智能分析技術構建的養老院智能視頻監控方…

[動態規劃]最長公共子序列

題目六 最長公共子序列 題目描述 我們稱一個字符的數組S為一個序列。對于另外一個字符數組Z,如果滿足以下條件&#xff0c;則稱Z是S的一個子序列&#xff1a;&#xff08;1&#xff09;Z中的每個元素都是S中的元素&#xff08;2&#xff09;Z中元素的順序與在S中的順序一致。…

22 FlexSPI—讀寫外部 SPI NorFlash

文章目錄 22.1 SPI 協議簡介22.1.1 SPI物理層22.1.2 協議22.1.3 CPOL/CPHA 及通訊模式22.1.4 擴展 SPI 協議22.1.5 SDR 和 DDR 模式 22.2 RT1052 的 FlexSPI 特性及架構22.2.1 RT1052 的 FlexSPI 外設簡介22.2.2 RT1052 的 FlexSPI 架構剖析22.2.2.1 通訊引腳22.2.2.2 指令查找…

如何將html網頁免費轉為excel?

一、直接復制。 直接復制是最簡單有效、快捷的解決方案&#xff0c;操作方法如下&#xff1a; 1、用鼠標像平常復制文本一樣&#xff0c;將整個網頁表格選中。 2、點擊右鍵&#xff0c;點擊“復制”。 3、打開excel軟件&#xff0c;鼠標點擊任意單元格。 4、點擊右鍵&#…

Power BI - 5分鐘學習拆分列

每天5分鐘&#xff0c;今天介紹Power BI拆分列功能。 什么是拆分列&#xff1f; 有時導入Power BI的數據表中&#xff0c;某列內容都包含同樣的特殊字符如 /&/-/_等&#xff0c;可以利用這個特殊字符進行拆分列的操作&#xff0c;獲得我們想要的信息。 操作舉例&#xf…

【從編譯器的角度看多態的底層實現原理】

系列文章目錄 歡迎讀者訂閱《計算機底層原理》、《從JVM看Java》系列文章、能夠幫助到大家就是對我最大的鼓勵&#xff01; 文章目錄 目錄 系列文章目錄 文章目錄 前言 一、編譯器做了什么&#xff1f; 1.詞法分析 2.語法分析 3.語義分析 4.中間代碼生成 5.優化 6.目標代碼生成…

SugarCRM 任意文件上傳漏洞復現(CVE-2023-22952)

0x01 產品簡介 SugarCRM是美國SugarCRM公司的一套開源的客戶關系管理系統(CRM)。該系統支持對不同的客戶需求進行差異化營銷、管理和分配銷售線索,實現銷售代表的信息共享和追蹤。 0x02 漏洞概述 SugarCRM index.php接口存在安全漏洞,該漏洞源于安裝組件中存在授權繞過和P…

在線人數(oj題)

題目不少于5個字&#xff0c;所以整了個括號湊字數 首先我想到的是用一個數組來記錄每一秒的在線人數 但是即使是short類型&#xff08;2字節&#xff09;&#xff0c;也會用到60 * 60 * 24 * 30 * 12 * 60 * 2 / 1024 / 1024 3,559.5703125 MB 而題目上限是256MB&#xff0…

UE小:UE5性能分析

開始錄制性能追蹤 要開始錄制性能追蹤&#xff0c;您可以簡單地點擊界面上的“開始錄制”按鈕。 查看追蹤數據 錄制完成后&#xff0c;點擊“Trace”菜單中的“UnrealInsights”選項來查看追蹤數據。 使用命令行進行追蹤 如果點擊錄制按鈕沒有反應&#xff0c;您可以通過命令…

【頭歌系統數據庫實驗】實驗4 MySQL單表查詢

目錄 第1關. 在users表中新增一個用戶&#xff0c;user_id為2019100904學號&#xff0c;name為2019-物聯網-李明 第2關. 在users表中更新用戶 user_id為robot_2 的信息&#xff0c;name設為 機器人二號 第3關. 將solution表中所有 problem_id 為1003 題目的解答結果&#xf…

python源碼,在線讀取傳奇列表,并解析為需要的JSON格式

python源碼&#xff0c;在線讀取傳奇列表&#xff0c;并解析為需要的JSON格式 [Server] ; 使用“/”字符分開顏色&#xff0c;也可以不使用顏色&#xff0c;支持以前的舊格式&#xff0c;只有標題和服務器標題支持顏色 ; 標題/顏色代碼(0-255)|服務器標題/顏色代碼(0-255)|服務…