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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

字符串操作 c语言,C语言字符串操作(示例代码)

發布時間:2024/1/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符串操作 c语言,C语言字符串操作(示例代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言字符串操作函數

1.strlen

strlen用于求一個C風格字符串的長度,函數原型為

#include size_t strlen(const char *s);

返回值為字符串的長度,當遇到‘\0‘時,認為字符串結束,‘\0‘不算入長度中。

#include #include

int main(void)

{char *str = "hello,world";int count =strlen(str);

printf("%d\n",count);return 0;

}

結果測試:11

測試結果符合預期,下面一三種方式實現自己的strlen函數。

size_t my_strlen1(const char *str)

{int count=0;

assert(str);//while(str[count++]);//return count-1;

while(*str++)

count++;returncount;

}

size_t my_strlen2(const char *str)

{

assert(str);if(*str == ‘\0‘) return 0;else return my_strlen2(++str)+1;

}

size_t my_strlen3(const char *str)

{char *headstr =str;

assert(str);while(*++str);return str -headstr;

}

第一種使用一次遍歷字符串,當字符不為‘\0‘時,count++;

第二種使用遞歸

第三種使用指針的剪發,用指向最后一個字符的指針減去指向首字符的指針。

2.strnlen

strnlen的原型為

#include size_t strnlen(const char *s, size_t maxlen);

strnlen的功能相當于一個計數器,函數從s的開頭往下數,直到遇見‘\0‘或者計數器達到maxlne的值時,停止計數。

其用途主要在于網絡圖形中,字節流一般是沒有‘\0‘的,所以,使用strlen一般會有問題,所有引入strnlen.

3.strcpy

strcpy的原型為

#include

char *strcpy(char *dest, const char *src);

strcpy的作用是將src開始的字符串(包括‘\0‘)復制到以dest為起始點的地址空間,返回值為指向dest的指針。

#include #include

intmain()

{char dest[100];char *src = "hello,world";

strcpy(dest,src);

printf("%s\n",dest);return 0;

}

測試結果:hello,world

符合預期

實現自己的strcpy

#include #include

char *my_strcpy(char *dest,const char *src)

{

assert(dest);

assert(src);while (*dest++ = *src++);returndest;

}

4.strncpy

strncpy的原型是

#include

char *strncpy(char *dest, const char *src, size_t n);

該函數同樣字符串拷貝函數,與strcpy不同的是,多了一個參數n。函數的作用是將src所指向的字符串中前n個字符復制到dest中。

5.strcmp

#include

int strcmp(const char *s1, const char *s2);

strcmp用來比較字符串s1和s2的大小,比較方式為字典式比較,比較標準為字符的ASCII值,比如"erfas"和"eradfasa";

逐個比較前兩個字符相等,第三個字符‘f’大于‘a‘,所以第一個字符串大。

當s1 大于 s2時,返回正數;

當s1 等于 s2時,返回0;

當s1 小于 s2時,返回負數;

#include #include

intmain()

{char *s1 = "hello wolrd";char *s2 = "change world";int count =strcmp(s1,s2);

printf("%d\n",count);return 0;

}

這段代碼在vs2010下結果為1,在gcc下測試結果為5

C語言標準只規定當s1 大于 s2時,返回值為正數,vs一律返回1,而gcc返回ASCII值的差,所以為了程序的

可移植性,不要寫出

strcmp(s1,s2) == 1

這樣的代碼,建議這樣寫

strcmp(s1,s2) > 0

下面我們嘗試實現自己的strcmp

#include #include

int my_strcmp(const char *s1,const char *s2)

{

assert(s1);

assert(s2);while((*s1) == (*s2))

{if((*s1) == ‘\0‘)return 0;

s1++;

s2++;

}if((*s1) - (*s2) > 0) return 1;else return -1;

}

6.strncmp

strncmp的原型為

#include

int strncmp(const char *s1, const char *s2, size_t n);

該函數基本與strcmp差不多,但是只比較兩個字符串的前n個字符。

7.strstr

strstr的原型為

#include

char *strstr(const char *haystack, const char *needle);

判斷needle是否是haystack的子串,如果是,返回needle在haystack中首次出現的地址,否則,返回NULL

#include #include

intmain()

{char *s1 = "hello,world";char *s2 = "llo,w";char *s3 =strstr(s1,s2);

printf("%s\n",s3);return 0;

}

測試結果為:

llo,world

結果符合預期

8.memset

memset的原型為

#include

void *memset(void *s, int c, size_t n);

memset的作用是將s所指向的內存中的前n個字節全部置為字符c的ASCII值。

#include #include

intmain()

{char s[100];

memset((char *)s,‘c‘,10);

s[10] = ‘\0‘;

printf("%s\n",s);return 0;

}

測試結果:cccccccccc

9.memcpy

memcpy

#include

void *memcpy(void *dest, const void *src, size_t n);

將src的數據復制n個到dest

#include #include

intmain()

{char src[100] = "hello,world";char dest[100];

memcpy(dest,src,11);

printf("%s\n",dest);return 0;

}

測試結果:hello,world

符合預期

memcpy不考慮內存重疊

10.memmove

memmove的原型為

#include

void *memmove(void *dest, const void *src, size_t n);

memmove與memcpy相似,但可以處理內存重疊的問題。

總結

以上是生活随笔為你收集整理的字符串操作 c语言,C语言字符串操作(示例代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

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