個人主頁:點我進入主頁
專欄分類:C語言初階? ? ??C語言程序設(shè)計————KTV? ? ? ?C語言小游戲? ? ?C語言進階
C語言刷題
歡迎大家點贊,評論,收藏。
一起努力,一起奔赴大廠。
目錄
1.前言? ? ? ??
2.長度受限制的字符串函數(shù)
2.1strncpy函數(shù)
2.2strncat函數(shù)
2.3strncmp函數(shù)
2.4小結(jié)
3.特殊的字符串函數(shù)
3.1strstr函數(shù)
3.2strtok函數(shù)
1.前言? ? ? ??
????????在上一篇文章中我們講過了長度不受限制的字符串函數(shù),包括strlen函數(shù),strcmp函數(shù),strcpy函數(shù),strcat函數(shù),學過和沒學過的老鐵們可以點擊長度不受限制的字符串函數(shù)
今天我們我們就講講長度受限制的字符串函數(shù),包括strncpy函數(shù),strncat函數(shù),strncmp函數(shù),在這些函數(shù)中長度受限制是需要我們加上要修改的字節(jié)數(shù)。還有一些特殊的函數(shù)包括strstr函數(shù),strtok函數(shù)。今天就來看看我們的內(nèi)容吧。
2.長度受限制的字符串函數(shù)
2.1strncpy函數(shù)
我們進入cplusplus函數(shù)可以看到strnpcy函數(shù)的參數(shù)。
????????strncpy函數(shù)的返回類型是char*,他的參數(shù)是 char * destination, const char * source, size_t num,在這里對于source由于不需要進行修改,只是需要進行拷貝,所以加上const,對于size_num是需要將source字符串的num個字節(jié)進行拷貝到destination,在第一個字節(jié)處進行修改,詳細的代碼如下:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "abcdefghigh";
char brr[] = "zzzzz";
strncpy(arr, brr, 4);
printf("%s", arr);
return 0;
}
?我們運行查看
我們發(fā)現(xiàn)字符串a(chǎn)rr的前4個字節(jié)修改為字符串的前4個字節(jié)。
2.2strncat函數(shù)
同樣我們進入cplusplus函數(shù)查看它的參數(shù)。
? ? ? ? strncat函數(shù)的返回值是char*,它的參數(shù)是?char * destination, const char * source, size_t num
和函數(shù)strncpy函數(shù),由于source函數(shù)不需要進行修改,所以用const函數(shù)進行修改,在size_t num是需要連接的字符的個數(shù),詳細的代碼如下:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[100] = "abcdefghigh";
char brr[] = "xzzzzz";
strncat(arr, brr, 4);
printf("%s", arr);
return 0;
}
我們運行代碼可以看到:
在這里我么的字符串brr是source,把他的前4個字符連接到字符串a(chǎn)rr后面,同時拷貝一下‘\0’;
2.3strncmp函數(shù)
我們進入cplusplus網(wǎng)站
????????我們可以看到strncmp的參數(shù)是const char * str1, const char * str2, size_t num,由于str1和str2不需要進行修改,只需要進行比較,所以用const進行修飾,size_t是需要比較的字符串的個數(shù)。對于strncmp函數(shù)的返回值是int類型,
?????????如果第一個大于第二個返回大于0的數(shù)據(jù),如果第一個小于第二個返回小于0的數(shù)據(jù),如果第一個等于第二個則返回0,注意這里的比較是對于前num個字符進行比較,比較的形式和前面的額strcmp一樣,具體的代碼演示如下:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "abcdefghigh";
char brr[] = "abce";
int ret=strncmp(arr, brr, 4);
printf("%d", ret);
return 0;
}
我們運行可以看到:
函數(shù)的返回值是-1。
2.4小結(jié)
? ? ? ? 對于這三個函數(shù),他們和長度不受限制的類似,只是多了一個限制條件,這個限制條件是限制的source.也就是說num是幾個就拷貝幾個,里面的循環(huán)由遇到‘\0’的while循環(huán),改為了for循環(huán),判定是i<num。
3.特殊的字符串函數(shù)
3.1strstr函數(shù)
? ? ? ? strstr函數(shù)是一個查找子串的函數(shù),它返回最早出現(xiàn)字串的位置,我們進入cplusplus網(wǎng)站進行查看,
? ? ? ? 我們看第一條,它參數(shù)和返回值都用const進行修飾,事實上他們兩條都一樣,只是第一條用const進行修飾,讓它的值不能改變,更加的安全,防止非法的修改。我們舉個例子來感受一直strstr函數(shù)的應用,代碼如下:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "abcabcdefghigh";
char brr[] = "abcd";
char *crr=strstr(arr, brr);
printf("%s", crr);
return 0;
}
我們運行可以看到:
我們想要模擬實現(xiàn),首先畫一下它的思路:
????????就是由str2和str1進行記錄位置,s1和s2進行比較,不相等str1和s1進行移動,相等str1和str2不動,s1和s2進行移動,相等移動,不相同重新指向str1和str2?,依次循環(huán),直到str1遇到‘\0’,模擬實現(xiàn)如下:
#include <stdio.h>
char* my_strstr(char* arr, char* brr)
{
char* str1 = arr, * s1 = arr, * str2 = brr, * s2 = brr;
while (*str1)
{
if (*s2 == '\0')
{
return str1;
}
if (*s1 == *s2)
{
s1++;
s2++;
}
else
{
str1++;
s1 = str1;
s2 = str2;
}
}
}
int main()
{
char arr[] = "abcabcdef";
char brr[] = "abcd";
char* p = my_strstr(arr, brr);
printf("%s", p);
return 0;
}
3.2strtok函數(shù)
????????
????????我們可以看到,strtok函數(shù)返回類型是char*,它的參數(shù)是 、char * str, const char * delimiters,這個函數(shù)是字符串切割,需要兩個字符串,第一個字符串中出現(xiàn)第二個字符串就會進行切割然后指向此段的首字符,具體的代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-714518.html
#include <string.h>
#include <stdio.h>
int main()
{
char arr[] = "abc,abcd@efacd*add";
char brr[] = ",@*";
char* str = arr;
for (str = strtok(arr, brr); str != NULL; str = strtok(NULL, brr))
{
printf("%s\n", str);
}
return 0;
}
今天的內(nèi)容就結(jié)束了,希望大家可以一鍵三連。文章來源地址http://www.zghlxwxcb.cn/news/detail-714518.html
到了這里,關(guān)于C/C++字符函數(shù)和字符串函數(shù)詳解————長度受限制的字符串函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!