日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言常用字符串操作函数大全详解(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)

發布時間:2023/12/10 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言常用字符串操作函数大全详解(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:string.h中常用字符串操作函數說明(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)
作者:一只青木呀
發布時間: 2020-09-19 13:57:48
網址:https://blog.csdn.net/weixin_45309916/article/details/108679027

目錄

  • 前言
  • 字符串函數大全
  • 字符串函數詳解
    • memchr
    • memcmp
    • memcpy
    • memmove
    • memset
    • strcat
    • strchr
    • strcmp
    • strcoll
    • strcpy
    • strcspn
    • strerror
    • strlen
    • strncat
    • strncmp
    • strncpy
    • strpbrk
    • strrchr
    • strspn
    • strstr
    • strtok
    • strxfrm

前言

C語言標準庫中一個常用的頭文件,在使用到字符數組時需要使用。string .h 頭文件定義了一個變量類型、一個宏和各種操作字符數組的函數。

使用時都需要加上頭文件

string.h

字符串函數大全

函數功能
memchr在內存塊中定位字符的位置還有相似函數memrchr和rawmemchr
memcmp把兩個內存塊的內容進行比較。
memcpy復制內存塊的內容
memmove移動內存塊中的內容
memset以字節方式填充內存塊
strcat把一個字符串后追加到另一個字符串后
strchr在字符串中查找一個字符的第一個位置指針
strcmp比較兩個字符串(ASCII)
strcoll比較兩個字符串(根據指定的 LC_COLLATE)
strcpy復制字符串
strcspn在一個字符串中查找另一個字符串中的第一個出現的字符的位置
strerror解釋錯誤代碼
strlen返回字符串長度
strncat把一個字符串的 n 個字符后追加到另一個字符串后
strncmp比較兩個字符串的前 n 個字符(ASCII)
strncpy復制字符串中的前 n 個字符
strpbrk查找字符串中第一個出現的屬于另一個字符串的任意字符的指針
strrchr查找字符串中一個字符的出現的最后位置
strspn計算字符串的從開頭起符合另一個字符串的連續字符個數
strstr在一個字符串中查找另一個字符串
strtok根據指定字符集分割一個字符串
strxfrm根據當前環境轉化字符串,將轉化后的前 n 個字符復制給另一個字符串

字符串函數詳解

memchr

  • 函數原型:
void *memchr(const void *s, int c, size_t n);
  • 功能:在參數 s 所指向的內存塊的前 n 個字節中搜索第一次出現字符 c(一個無符號字符)的位置,并返回相應的指針。

  • 返回值:找到返回相應的指針,否則返回 NULL。

  • demo:

#include <stdio.h> #include <string.h>char str[1000], ch, *pch;int main(){gets(str);ch = getchar();//void類型轉化成char類型 void也是一種類型pch = (char*) memchr(str, ch, strlen(str)); // memchr 的使用if ( pch != NULL){printf ("%c found at %d.\n", ch, pch - str);//地址減去地址 得到相應的位置}else{printf ("%c not found.\n", ch);}return 0; }
  • 運行結果:

memcmp

  • 函數原型:
int memcmp(const void *s1, const void *s2, size_t n);
  • 功能:memcmp()函數比較內存區域s1和s2的前n個字節(每個都被解釋為無符號字符)。

  • 返回值:返回一個指向dest的指針。

返回值意義
大于零ptr1 < ptr2
等于零ptr1 == ptr2
小于零ptr1 > ptr2
  • demo:
#include <stdio.h> #include <string.h>char s1[20], s2[20];int main(){while(1){gets(s1);gets(s2);int n = memcmp(s1, s2, sizeof(s1));if ( n > 0 ){printf ("'%s' is greater.n is %d\n", s1,n);}else if( n == 0 ){printf ("'%s' is the same as '%s'. n is %d\n", s1, s2,n);}else{printf ("'%s' is greater.n is %d\n", s2,n);}memset(s1,0,sizeof(s1));memset(s2,0,sizeof(s2));}return 0; }
  • 運行結果

memcpy

  • 函數原型:
void *memcpy(void *dest, const void *src, size_t n);
  • 函數功能:從內存區src復制n個字節到內存區dest。內存區不能重疊。只會覆蓋。

  • 返回值:返回一個指向dest的指針。

  • demo:

#include <string.h> #include <stdio.h>char s1[] = "abcdefg", s2[100]={'0'};int main() {memcpy(s2, s1, strlen(s1) + 1);printf (" s2 is '%s'.\n", s2);return 0; }
  • 運行結果

memmove

  • 函數原型:
void *memmove(void *dest, const void *src, size_t n);
  • 函數功能:memmove()函數將n個字節從內存區域src拷貝到內存區域dest。這些內存區域可能重疊:復制發生在
    雖然src中的字節首先被復制到一個不重疊src或dest的臨時數組中,然后到dest的臨時數組。

  • 返回值:返回一個指向dest的指針。

  • demo

//去掉了字符串前面的 4 個空格。 #include <stdio.h> #include <string.h>char s[] = " too space";int main(){memcpy(s, s+4, strlen(s+4)+1);printf ("s is '%s'.\n",s);return 0; }
  • 運行結果

memset

  • 函數原型
void *memset(void *s, int c, size_t n);
  • 函數功能:用常量字節c填充s指向的內存區域的前n個字節。

  • 返回值:返回一個指向內存區域s的指針。

  • demo

#include <stdio.h> #include <string.h>char str[] = "hello world!";int main(){memset(str, '-', strlen(str));puts(str);return 0; }
  • 運行效果

strcat

  • 函數原型:
char * strcat ( char * des, const char * src );
  • 函數功能:將 src 中的內容追加到 des中。

  • 返回值:返回 des指針。

  • demo:

#include <stdio.h> #include <string.h>char s1[] = "hello ", s2[] = "world!";int main(){strcat(s1,s2);puts(s1);return 0; }
  • 運行結果

strchr

  • 函數原型:
char *strchr(const char *s, int c);
  • 函數功能:返回 s中的 c出現的第一個位置的指針。

  • 返回值:如果找到,返回 s中的 c出現的第一個位置的指針;否則返回 NULL。

  • demo:

#include <stdio.h> #include <string.h>char str[] = "hello world!", ch = 'o';int main(){char *pch = strchr(str, ch);if ( pch != NULL){printf (" '%c' is found at %d.\n", ch, pch - str);}else{printf ("'%c' is not found.\n", ch);}return 0; }
  • 運行效果

strcmp

  • 函數原型:
int strcmp(const char *s1, const char *s2);
  • 功能:比較字符串 str1 和 str2 的字典序大小(ASCII)。

  • 返回值:

返回值意義
小于零str1 < str2
等于零str1 == str2
大于零str1 > str2
  • demo:
#include <stdio.h> #include <string.h>char s1[] = "abcdefg", s2[] = "abcdfgh";int main(){int n = strcmp(s1, s2);if ( n > 0 ){printf ("\"%s\" is greater.\n", s1);}else if( n == 0 ){printf ("\"%s\" is the same as \"%s\".\n", s1, s2);}else{printf ("\"%s\" is greater.\n", s2);}return 0; }
  • 運行效果

strcoll

  • 函數原型:
int strcoll(const char *s1, const char *s2);
  • 功能:默認情況下(LC_COLLATE 為 “POSIX” 或 “C” )和 strcmp 一樣根據 ASCII 比較字符串大小。對于設置了 LC_COLLATE 語言環境的情況下,則根據 LC_COLLATE 設置的語言排序方式進行比較。例如:漢字,根據拼音進行比較

  • 返回值:

返回值意義
小于零str1 < str2
等于零str1 == str2
大于零str1 > str2
  • demo:
#include <stdio.h> #include <string.h>char s1[] = "abcdefg", s2[] = "abcdfgh";int main(){int n = strcoll(s1, s2);if ( n > 0 ){printf ("\"%s\" is greater.\n", s1);}else if( n == 0 ){printf ("\"%s\" is the same as \"%s\".\n", s1, s2);}else{printf ("\"%s\" is greater.n\n", s2);}return 0; }
  • 運行結果

strcpy

  • 函數原型:
char *strcpy(char *dest, const char *src);
  • 功能:將 src的內容復制給 des,需要保證 des足夠容納 src的空間

  • 返回值: 返回 des。

  • demo:

#include <stdio.h> #include <string.h>char s1[] = "abcdefg", s2[100];int main(){strcpy(s2, s1);printf ("s2 is '%s'.\n", s2);return 0; }
  • 運行效果

strcspn

  • 函數原型:
size_t strspn(const char *s, const char *accept);
  • 功能:返回 s 中出現的第一個屬于 accept 的字符的位置。

  • 返回值: 如果找到返回字符位置,否則返回字符串長度。

  • demo:

#include <stdio.h> #include <string.h>int main(){int pos = strcspn("qwert1234des","0123456789");printf("%d\n", pos);return 0; }
  • 運行結果:

strerror

  • 函數原型:
char * strerror ( int errnum );
  • 函數功能:給出錯誤代碼 errnum 的描述內容。

  • 返回值:返回描述錯誤內容的字符串指針。

  • demo:

#include <stdio.h> #include <string.h> #include <errno.h>int main(){FILE *f = fopen("unexist.file", "r");if( f == NULL ){printf ("Error: %s\n",strerror(errno));}return 0; }

strlen

  • 函數原型:
size_t strlen ( const char * str );
  • 函數功能:返回字符串 str 的長度。

  • 返回值:返回字符串 str 的長度。

  • demo:

#include <stdio.h> #include <string.h>int main(){char a[] = "hello world!";printf("%d\n", strlen(a));return 0; }

strncat

  • 函數原型:
char * strncat ( char * destination, const char * source, size_t num );
  • 函數功能:將 source 中的前 num 個字符串追加到 destination 后。

  • 返回值:返回追加后的 destination 指針。

  • demo:

#include <stdio.h> #include <string.h>char s1[] = "hello ", s2[] = "world! -----";int main(){strncat(s1, s2, 6);puts(s1);return 0; }

strncmp

  • 函數原型:
int strncmp ( const char * str1, const char * str2, size_t num );
  • 函數功能:比較 str1 中的前 num 個字符和 str2 中 的前 num 個字符的大小。

  • 返回值:

返回值意義
小于零str1 < str2
等于零str1 == str2
大于零str1 > str2
  • demo
#include <stdio.h> #include <string.h>char s1[] = "abcdfgh", s2[] = "abcdefg";int main(){int n = strncmp(s1, s2, 4);if ( n > 0 ){printf ("\"%s\" is greater in the first 4.\n", s1);}else if( n == 0 ){printf ("\"%s\" is the same as \"%s\" in the first 4.\n", s1, s2);}else{printf ("\"%s\" is greater in the first 4.\n", s2);}return 0; }

strncpy

  • 函數原型:
char * strncpy ( char * destination, const char * source, size_t num );
  • 函數功能:將 source 中的前 num 個字符復制給 destination。如果 source 的長度大于 num,不會自動追加 \0。若小于,則會填充\0,直到長度為 num。

  • 返回值:返回 destination 的指針。

  • demo:

#include <stdio.h> #include <string.h>int main(){char a[1000], b[1000] = "hello world!";strncpy(a, b, 5); //不會自動補 NULLa[5] = '\0';puts(a);return 0; }

strpbrk

  • 函數原型:
char * strpbrk ( char * str1, const char * str2 );
  • 函數功能:查找字符串 str1 中第一個出現的屬于字符串 str2 中的任意字符的指針。

  • 返回值:返回字符串 str1 中第一個出現的屬于字符串 str2 中的任意字符的指針。若沒找到,返回 NULL。

  • demo:

#include <stdio.h> #include <string.h>int main(){char a[] = "This is a test.", b[] = "aeiou";char *pch = strpbrk(a, b);printf("%d\n", pch - a);return 0; }

strrchr

  • 函數原型:
char * strrchr ( char * str, int character );
  • 函數功能:在字符串中 str 查找最后一個 character 的指針位置。

  • 返回值:如果找到,在字符串中 str 查找最后一個 character 的指針位置。否則返回 NULL。

  • demo:

#include <stdio.h> #include <string.h>char str[] = "hello world!", ch = 'o';int main(){char *pch = strrchr(str, ch);if ( pch != NULL ){printf ("'%c' is found at %d.\n", ch, pch - str);}else{printf ("'%c' is not found.\n", ch);}return 0; }

strspn

  • 函數原型:
size_t strspn ( const char * str1, const char * str2 );
  • 函數功能: 計算 str1 字符串從開頭開始的連續字符,且這些字符都完全是 str2 所指字符串中的字符。

  • 返回值:返回字符的個數。

  • demo:

#include <stdio.h> #include <string.h>int main(){char a[] = "aaaaauuuuuxxxsada", b[] = "aeiou";int n = strspn(a, b);printf("%d\n", n); //輸出為10,滿足條件的字符串為aaaaauuuuu。return 0; }

strstr

  • 函數原型:
const char * strstr ( const char * str1, const char * str2 ) char * strstr ( char * str1, const char * str2 )
  • 函數功能:查找字符串 str1 中首次出現字符串 str2 的位置。

  • 返回值:返回 str1 中首次出現 str2 的位置的指針,如果 str1 中不存在 str2 則返回 NULL。

  • demo:

#include <stdio.h> #include <string.h>int main(){char a[] = "hello world!", b[] = "world";char *pch = strstr(a, b);printf("%d\n", pch - a);return 0; }

strtok

  • 函數原型:
char * strtok ( char * str, const char * delimiters );
  • 函數功能:根據 delimiters 指定的內容進行分割。第一次需傳入待分割的字符串 str 指針,之后的調用傳入 NULL 即可。

  • 返回值:返回指向分割后相應的片段的指針。

  • demo:

#include <stdio.h> #include <string.h>char str[] ="- This is a sample string.";int main (){char *pch = strtok(str, " .-,");while( pch != NULL){printf("%s\n", pch);pch = strtok(NULL, " .-,");}return 0; }

strxfrm

  • 函數原型:
size_t strxfrm ( char * destination, const char * source, size_t num );
  • 函數功能說明:根據當前環境(由LC_COLLATE所指定)轉化 source 字符串,并將前 num 個字符復制給 destination。

  • 返回值:返回轉換后的字符串的長度。

總結

以上是生活随笔為你收集整理的C语言常用字符串操作函数大全详解(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。