C标准库——string

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

strcat_s(str, "strings ");
strcat_s(str, "are ");
strcat_s(str, “concatenated.”);*/ //使用跟安全的函数
puts(str);
system(“pause”);
return 0;
}


### (2)strncat函数


介绍:将源的第一个num字符附加到目标,以及一个终止的空字符。


如果源中的char字符串的长度小于num,则只复制到终止空字符之前的内容。  




#include
using namespace std;

/* strncat example */
#include <stdio.h>
#include <string.h>

int main()
{
char str1[20];
char str2[20];
/strcpy(str1, "To be ");
strcpy(str2, “or not to be”);
strncat(str1, str2, 6);
/
strcpy_s(str1, "To be ");
strcpy_s(str2, “or not to be”);
strncat_s(str1, str2, 6); //使用安全类型
puts(str1);
system(“pause”);
return 0;
}


  



## 3.比较


### (1)memcmp函数



int memcmp ( const void * ptr1, const void * ptr2, size_t num );


解释:将ptr1所指向的内存块的第一个num字节与ptr2所指向的第一个num字节进行比较,如果它们都匹配,则返回0;如果不匹配,则返回与0不同的值,表示哪个值更大。<0,表示ptr1<ptr2;>0,表示ptr1>ptr2;  



与strcmp不同,函数在找到null字符后不会停止比较。  




#include
using namespace std;

/* memcmp example */
#include <stdio.h>
#include <string.h>

int main()
{
char buffer1[] = “DWgaOtP12df0”;
char buffer2[] = “DWGAOTP12DF0”;

int n;

n = memcmp(buffer1, buffer2, sizeof(buffer1));

if (n>0) 
	printf("'%s' is greater than '%s'.\n", buffer1, buffer2);
else if (n<0) 
	printf("'%s' is less than '%s'.\n", buffer1, buffer2);
else 
	printf("'%s' is the same as '%s'.\n", buffer1, buffer2);
system("pause");
return 0;

}


### (2)strcmp函数



int strcmp ( const char * str1, const char * str2 );


解释:比较char字符串str1和char字符串str2。


这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,它将继续执行以下对,直到字符不同或到达终止的空字符为止。  



这个函数执行字符的二进制比较。对于考虑特定于地区的规则的函数,请参见strcoll。  



返回值:0表示str1 = str2;<0 str1<str2 ;  >0  str1 > str2;



#include
using namespace std;

#include <stdio.h>
#include <string.h>

int main() //输入apple时跳出循环
{
char key[] = “apple”;
char buffer[80];
do
{
printf(“Guess my favorite fruit? “);
fflush(stdout);
scanf(”%79s”, buffer);
} while (strcmp(key, buffer) != 0);
puts(“Correct answer!”);
system(“pause”);
return 0;
}


  



### (3)strcoll函数



int strcoll ( const char * str1, const char * str2 );


解释:将C字符串str1与C字符串str2进行比较,两者都根据当前选择的C语言环境的LC\_COLLATE类别进行适当解释。


这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续使用下面的一对,直到字符不同,或者直到到达表示字符串结束的空字符为止。这个函数的行为取决于所选C语言环境的LC\_COLLATE类别。  



### (4)strncmp函数



int strncmp ( const char * str1, const char * str2, size_t num );


解释:将C字符串str1与C字符串str2的num个字符进行比较。


这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,它将继续执行以下对,函数结束条件:(1)直到字符不同,(2)直到到达终止的空字符为止,(3)或者直到两个字符串中的num字符匹配为止。(无论哪个是第一个)  



返回值:0表示str1 = str2;<0 str1<str2 ;  >0  str1 > str2;  




#include
using namespace std;

/* strncmp example */
#include <stdio.h>
#include <string.h>

int main()
{
char str[][5] = { “R2D2” , “C3PO” , “R2A6” };
int n;
puts(“Looking for R2 astromech droids…”);
for (n = 0; n<3; n++)
if (strncmp(str[n], “R2xx”, 2) == 0)
{
printf(“found %s\n”, str[n]);
}
system(“pause”);
return 0;
}


### (5)strxfrm函数



size_t strxfrm ( char * destination, const char * source, size_t num );

解释:根据当前语言环境转换源指向的char字符串,并将转换后的字符串的第一个num字符串复制到目标,返回其长度。 
  

另一种方法是,通过为目标指定一个空指针,为num指定一个零,该函数只能用于检索长度。  



目标指针和源指针不能重叠。  




#include
using namespace std;

/* strncmp example */
#include <stdio.h>
#include <string.h>

int main()
{
char str[][5] = { “R2D2” , “C3PO” , “R2A6” };
int n;
puts(“Looking for R2 astromech droids…”);
n = strxfrm(NULL, str[0], 0);
cout << n << endl;//str[0] 的字符串长度为 n + 1
system(“pause”);
return 0;
}


### 搜索:


### (1)memchr函数



const void * memchr ( const void * ptr, int value, size_t num );
void * memchr ( void * ptr, int value, size_t num );


解释:在 ptr 所指向的内存块的第一个num字节中搜索第一次出现  value (被解释为无符号字符),并返回一个指向它的指针。


ptr数组上选中每个字节 和 value 都被解释为 unsigned char,来进行比较。  




#include
using namespace std;

/* memchr example */
#include <stdio.h>
#include <string.h>

int main() //寻找str中的p位置
{
char * pch;
char str[] = “Example string”;
pch = (char*)memchr(str, ‘p’, strlen(str));
if (pch != NULL)
printf(“‘p’ found at position %d.\n”, pch - str + 1);
else
printf(“‘p’ not found.\n”);
system(“pause”);
return 0;
}


### (2)strchr函数



const char * strchr ( const char * str, int character );
char * strchr ( char * str, int character );


介绍:返回:character在 str第一次出现的地方。


终止的空字符被认为是  char 字符串的一部分。 因此,它也可以被定位以检索指向字符串结尾的指针。  




#include
using namespace std;

/* strchr example */
#include <stdio.h>
#include <string.h>

int main() // 输出str中所有s的位置。
{
char str[] = “This is a sample string”;
char * pch;
printf(“Looking for the ‘s’ character in “%s”…\n”, str);
pch = strchr(str, ‘s’);
while (pch != NULL)
{
printf(“found at %d\n”, pch - str + 1);
pch = strchr(pch + 1, ‘s’);
}
system(“pause”);
return 0;
}


### (3)strcspn函数



size_t strcspn ( const char * str1, const char * str2 );

介绍:扫描str1以查找第一次出现任何字符属于str2,并返回在第一次出现之前读取的str1的字符数。 
  

搜索包括终止空字符。 因此,如果在str1中找不到str2的任何字符,函数将返回str1的长度。  




#include
using namespace std;

/* strcspn example */
#include <stdio.h>
#include <string.h>

int main()
{
char str[] = “fcba73”;
char keys[] = “1234567890”;
int i;
i = strcspn(str, keys);
printf(“The first number in str is at position %d.\n”, i + 1);

system("pause");
return 0;

}


### (4)strpbrk函数



const char * strpbrk ( const char * str1, const char * str2 );
char * strpbrk ( char * str1, const char * str2 );


介绍:返回str1中第一个出现在str2中的任何字符的指针,如果没有匹配(即str1中不含有str2中的任何字符),则返回空指针。


搜索不包括任何字符串的终止空字符,但在那里结束。  




#include
using namespace std;

/* strpbrk example */
#include <stdio.h>
#include <string.h>

int main() //测试str 中出现 key 中字符的情况 i i a a e i
{
char str[] = “This is a sample string”;
char key[] = “aeiou”;
char * pch;
printf(“Vowels in ‘%s’: “, str);
pch = strpbrk(str, key);
while (pch != NULL)
{
printf(”%c “, *pch);
pch = strpbrk(pch + 1, key);
}
printf(”\n”);
system(“pause”);
return 0;
}


### (5)strrchr函数



const char * strrchr ( const char * str, int character );
char * strrchr ( char * str, int character );


介绍:返回character 在str 最后一次出现的指针。


终止空字符被认为是  char 字符串的一部分。 因此,它也可以位于检索指向字符串结尾的指针。  




#include
using namespace std;

/* strrchr example */
#include <stdio.h>
#include <string.h>

int main() //输出s在str中最后一次出现的位置
{
char str[] = “This is a sample string”;
char * pch;
pch = strrchr(str, ‘s’);
printf(“Last occurence of ‘s’ found at %d \n”, pch - str + 1);
system(“pause”);
return 0;
}


  

### (6)strspn函数



size_t strspn ( const char * str1, const char * str2 );


介绍:返回str2包含的字符在str1中出现过多少次。


搜索不包括任何字符串的终止空字符,但在那里结束。  




#include
using namespace std;

/* strspn example */
#include <stdio.h>
#include <string.h>

int main()
{
int i;
char strtext[] = “129th”;
char cset[] = “1234567890”;

i = strspn(strtext, cset);//strtext中1 2 9来自cset
printf("The initial number has %d digits.\n", i);
system("pause");
return 0;

}


### (7)strstr函数



const char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 );


介绍:返回str1中第一次出现str2的指针,如果str2不是str1的一部分,则返回空指针。


匹配过程不包括终止空字符,但它停在那里。  




#include
using namespace std;

/* strstr example */
#include <stdio.h>
#include <string.h>

int main() //用sample 替换 simple
{
char str[] = “This is a simple string”;
char * pch;
pch = strstr(str, “simple”);
strncpy(pch, “sample”, 6);
puts(str);
system(“pause”);
return 0;
}


### (8)strtok函数



char * strtok ( char * str, const char * delimiters );


介绍:将字符串拆分为令牌,对此函数的一系列调用将str分割为令牌,这些有delimiters中的任意部分分隔成一系列令牌。


在第一次调用时,函数需要一个C字符串作为str的参数,其第一个字符用作扫描令牌的起始位置。 在随后的调用中,函数需要一个空指针,并将最后一个标记结束后的位置用作新的扫描起始位置。  



为了确定一个标记的开始和结束,函数首先从delimiters中不包含的第一个字符的起始位置开始扫描(这成为标记的开始)。 然后从delimiters的第一个字符的标记开始扫描,这将成为标记的结尾。 如果找到终止空字符,扫描也会停止。  



该标记的这一端自动被一个空字符替换,并且该标记的开始由该函数返回。  



一旦在strtok的调用中发现了str的终止空字符,则对此函数的所有后续调用(使用空指针作为第一个参数)将返回一个空指针。  



找到最后一个标记的位置由函数内部保存,以便在下次调用时使用(不需要特定的库实现来避免数据竞争)。  




#include
using namespace std;

/* strtok example */
#include <stdio.h>
#include <string.h>

int main()
{
char str[] = “- This, a sample string.”;
char * pch;
printf(“Splitting string “%s” into tokens:\n”, str);
pch = strtok(str, " ,.-“);
while (pch != NULL)
{
printf(”%s\n", pch);
pch = strtok(NULL, " ,.-");
}

/*char str[] = "- This, a sample string.";  // 安全类型调试
char * pch;
char* buf;
printf("Splitting string \"%s\" into tokens:\n", str);
pch = strtok_s(str, " ,.-",&buf);
printf("%s\n", pch);
printf("buf %s\n", buf);
while (pch != NULL)
{
	printf("%s\n", pch);
	printf("buf %s\n", buf);
	pch = strtok_s(NULL, " ,.-", &buf);
}*/
system("pause");
return 0;

}


### 其它


### (1)memset函数



img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

strtok_s(str, " ,.-“,&buf);
printf(”%s\n", pch);
printf(“buf %s\n”, buf);
while (pch != NULL)
{
printf(“%s\n”, pch);
printf(“buf %s\n”, buf);
pch = strtok_s(NULL, " ,.-", &buf);
}*/
system(“pause”);
return 0;
}


### 其它


### (1)memset函数



[外链图片转存中…(img-W7A8XFSK-1715865314515)]
[外链图片转存中…(img-DgWdpXuR-1715865314515)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值