C語(yǔ)言中操作字符串的函數(shù)詳解
更新時(shí)間:2022年03月23日 09:42:11 作者:朱國(guó)鑫
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言中操作字符串的函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
一、函數(shù)表
| 函數(shù)名 | 函數(shù) | 功能 |
|---|---|---|
| strlen | size_t strlen(const char* s); | 返回字符串 s 的長(zhǎng)度(不包括結(jié)尾的0) |
| strcmp | int strcmp(const char* s1, const char* s2); | 比較兩個(gè)字符串,返回:如果 s1 == s2,返回 0;如果 s1<s2 則返回小于 0 (如 -1);如果 s1>s2 則返回大于 0 (如 1) |
| strcpy | char* strcpy(char* restrict dst, const char* reestrict src) | 把字符串 src 復(fù)制拷貝到字符串 dst,返回 dst,restrict 表明 src 和 dst 不能重疊 |
| strcat | char* stract(char* restrict s1, const char* reestrict s2) | 把字符串 s2 拷貝到字符串 s1 的后面,連接成一個(gè)長(zhǎng)的字符串,返回 s1 |
| strchr | char* strchr(const char* s, int c) | 返回一個(gè)指針,指向字符串 s1 中字符 ch 的第一次出現(xiàn)的位置 |
| strstr | char* strstr(const char* s1, const char* s2) | 返回一個(gè)指針,指向字符串 s1 中字符串 s2 的第一次出現(xiàn)的位置 |
二、strlen
實(shí)例
#include <stdio.h>
#include <string.h>
//自定義 strlen()函數(shù)
size_t mylen(const char* s)
{
int idx = 0;
while (s[idx] != '\0') {
idx++;
}
return idx;
}
int main()
{
char a[] = "Hello";
printf("mylen=%llu\n", mylen(a));
printf("strlen=%llu\n", strlen(a));// {'H', 'e', 'l', 'l', 'o'};
printf("sizeof=%llu\n", sizeof(a));// {'H', 'e', 'l', 'l', 'o','\0'};
return 0;
}
運(yùn)行結(jié)果

三、strcmp
實(shí)例
#include <stdio.h>
#include <string.h>
//自定義 strcmp()函數(shù)
int mycmp1(const char* s1, const char* s2)
{
int idx = 0;
while (1) {
if (s1[idx] != s2[idx]) {
break;
}
else if (s1[idx] == '\0') {
break;
}
idx++;
}
return s1[idx] - s2[idx];
}
int mycmp2(const char* s1, const char* s2)
{
int idx = 0;
while (s1[idx] == s2[idx] && s1[idx] != 0) {
idx++;
}
return s1[idx] - s2[idx];
}
int mycmp3(const char* s1, const char* s2)
{
int idx = 0;
while (*s1 == *s2 && *s1 != 0) {
s1++;
s2++;
}
return *s1 - *s2;
}
int main()
{
char s1[] = "abc";
char s2[] = "abc";
char s3[] = "abc ";
char s4[] = "bbc";
char s5[] = "Abc";
printf("mycmp1=%d\n", mycmp1(s1, s2));
printf("mycmp2=%d\n", mycmp2(s1, s3));
printf("mycmp3=%d\n", mycmp3(s1, s4));
printf("mycmp3=%d\n", mycmp3(s1, s5));
printf("strlen=%d\n", strcmp(s1, s2));
printf("strlen=%d\n", strcmp(s1, s3));
printf("strlen=%d\n", strcmp(s1, s4));
printf("strlen=%d\n", strcmp(s1, s5));
return 0;
}
運(yùn)行結(jié)果
VS編輯器的原因,庫(kù)函數(shù) strlen 的結(jié)果只有 0, -1, 1 三種結(jié)果。

四、strcpy
// 復(fù)制一個(gè)字符串 char* dst = (char*)malloc(strlen(src)+1); strcpy(dst,src); // strlen 查 src 大小 +1 (+1 的原因是加上字符串最后的 ‘\0', strlen 讀取的長(zhǎng)度不包括 ‘\0'), 再 malloc 分配空間給 dst, 這樣 dst 的空間正好等于 src, 然后再執(zhí)行 strcpy 復(fù)制操作
實(shí)例
#include <stdio.h>
#include <string.h>
//自定義 strcpy()函數(shù)
char* mycpy1(char* dst, const char* src)
{
int idx = 0;
while (src[idx] != '\0') {
dst[idx] = src[idx];
idx++;
}
dst[idx] = '\0';
return dst;
}
char* mycpy2(char* dst, const char* src)
{
char* ret = dst;
while (*src) {
*dst++ = *src++;
}
*dst = '\0';
return ret;
}
int main()
{
char s1[] = "abc";
char s2[] = "def";
char s3[] = "ghi";
char s4[] = "jkl";
printf("s1=%s\n", s1);
strcpy(s1, s2);
printf("s1=%s\n", s1);
mycpy1(s1, s3);
printf("s1=%s\n", s1);
mycpy2(s1, s4);
printf("s1=%s\n", s1);
return 0;
}
運(yùn)行結(jié)果

五、stract
實(shí)例
#include <stdio.h>
#include <string.h>
int main()
{
char s1[10] = "abc";
char s2[] = "def";
printf("s1=%s\n", s1);
strcat(s1, s2);
printf("s1=%s\n", s1);
return 0;
}
運(yùn)行結(jié)果

六、strchr
實(shí)例
#include <stdio.h>
#include <string.h>
int main()
{
char s1[10] = "abcdebcde";
printf("%p\n", s1);
printf("%p\n", s1 + 1);
char* p = strchr(s1, 'b');
printf("%s\n", p);
printf("%p\n", p);
return 0;
}
運(yùn)行結(jié)果

總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C字符串函數(shù)對(duì)應(yīng)的C++ string操作詳解
在本篇文章里小編給大家整理的是一篇關(guān)于C字符串函數(shù)對(duì)應(yīng)的C++ string操作知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們學(xué)習(xí)下。2020-01-01
C++實(shí)現(xiàn)LeetCode(347.前K個(gè)高頻元素)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(347.前K個(gè)高頻元素),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08

