欢迎光临
我们一直在努力

C语言-字符串库函数

1,求字符串长度:strlen

2,字符串赋值:strcpy

3,字符串追加:strcat

4,两个字符串的比较:strcmp

5,长度受限制的字符串函数:strncpy  strncat  strncmp

6,查找子串的一个函数:strstr

7,字符串分割函数:strtok

8,执行失败的时候,设置错误码:strerror

————————————————————————————–

1,求字符串长度:strlen

#include<stdio.h>

//==============================strlen===================================
//size_t strlen的返回值 —>无符号整型
////模拟实现strlen
#include<assert.h>
//计数器方法
//指针-指针
//递归的方式
size_t my_strlen(const char* str) {
size_t count = 0;
assert(str);
while (*str!='\\0') {
count++;
str++;
}
return count;
}
int main() {
char arr[] = "abcdef";
size_t n = my_strlen(arr);
printf("%u\\n", n);
return 0;
}

2,字符串赋值:strcpy

#include<stdio.h>
//==============================strcpy===================================
//strcpy的使用 复制的字符串以\\0结束 ,赋值的数组(目标区域)不可修改
#include<string.h>
//int main() {
//char name[20] = "xxxxxxxxxxx";
////strcpy(name, "zhangsan");
////strcpy(name, "zhang\\0san");
//char arr[] = { 'b','i','t' };
//strcpy(name, arr);
//
////name = "zhangsan";//err name数组名是地址,地址是一个常量,不能被赋值
//printf("%s\\n", name);
//return 0;
//}
//int main() {
//char* p = "abcdef";
//char arr[] = "bit";
//strcpy(p, arr);//目标区域不可修改
//return 0;
//}

//strcpy的模拟实现(注意返回值为char*)
char* my_strcpy(char* dest,const char* src) {
assert(dest);
assert(src);
char* ret = dest;
/*while (*src) {
*dest++ = *src++;
}*/
while (*dest++ = *src++) {
;
}
*dest = *src;//\\0
return ret;
}

int main() {
char arr1[] = "abcdef";
char arr2[20] = { 0 };
my_strcpy(arr2, arr1);
printf("%s\\n", arr2);//abcdef
return 0;
}

3,字符串追加:strcat

#include<stdio.h>
//==============================strcat===================================
//字符串追加
//int main() {
//char arr1[20] = "hello ";
//strcat(arr1, "world");
//printf("%s\\n",arr1);
//return 0;
//}

//strcpy的模拟实现(注意返回值为char*)
char* my_strcat(char* dest,const char* src) {
assert(dest);
assert(src);
char* ret = dest;
//找到目标空间的末尾\\0
while (*dest!='\\0') {
dest++;
}
//拷贝字符串
while (*dest++ = *src++) {
;
}

return ret;
}

int main() {
char arr1[20] = "hello ";
my_strcat(arr1, "world");
printf("%s\\n",arr1);
return 0;
}

4,两个字符串的比较:strcmp

#include<stdio.h>
//==============================strcmp===================================
//两个字符串比较是否相等
//int main() {
//char arr1[20] = "zhangsan";
//char arr2[] = "zhangsanfeng";

//错误示范
//比较一下两个字符串是否相等
//arr1是数组名,数组名是数组首元素的地址
//arr2是数组名,数组名是数组首元素的地址
/*if (arr1 == arr2) {
printf("==");
}*/

//两个字符串的比较,应该使用strcmp
//int ret = strcmp(arr1, arr2);
//if (ret<0)
//{
//printf("<\\n");
//}
//else if (ret ==0)
//{
//printf("==\\n");
//}
//else
//{
//printf(">\\n");
//
//}
//
//return 0;
//}

//模拟strcmp
int my_strcmp(const char* str1, const char* str2) {
assert(str1 && str2);
while (*str1==*str2) {
if (*str1 == '\\0')
return 0;//相等
str1++;
str2++;
}
if (*str1>*str2)
{
return 1;
}
else
{
return -1;
}
}

int main() {
/*char arr1[20] = "zhangsan";
char arr2[] = "zhangsanfeng";*/
char arr1[] = "abc";
char arr2[] = "abc";

int ret = my_strcmp(arr1, arr2);
if (ret<0)
{
printf("<\\n");
}
else if (ret ==0)
{
printf("==\\n");
}
else
{
printf(">\\n");

}
return 0;
}

5,长度受限制的字符串函数:strncpy  strncat  strncmp

#include<stdio.h>
//==============================长度受限制的字符串函数===================================
//strncpy strncat strncmp

//int main() {
//char arr1[20] = "abcdef";
//char arr2[] = "bit";
//strncpy(arr1, arr2, 3);
//printf("%s\\n", arr1);
//return 0;
//}

//int main() {
//char arr1[20] = "hello\\0xxxxxx";
//char arr2[] = "bit";
//strncat(arr1, arr2, 6);
//return 0;
//}

int main() {
char arr1[] = "abcdef";
char arr2[] = "abc";
int ret = strncmp(arr1, arr2, 4);
printf("%d\\n", ret);
if (ret==0)
{
printf("==\\n");
}
else if (ret<0)
{
printf("<\\n");
}
else
{
printf(">\\n");

}
return 0;
}

6,查找子串的一个函数:strstr

#include<stdio.h>
//==============================strstr===================================
//查找子串的一个函数
//int main() {
//char email[] = "zpw@bitejiuyeke.com";
//char substr[] = "bitejiuyeke";
//char* ret = strstr(email,substr);
//if (ret==NULL)
//{
//printf("子串不存在\\n");
//}
//else
//{
//printf("%s\\n", ret);
//}
//return 0;
//}

//模拟实现strstr
char* my_strstr(const char* str1, const char* str2) {
assert(str1 && str2);
const char* s1 = str1;
const char* s2 = str2;
const char* p = str1;

while (*p) {
s1 = p;
s2 = str2;
while (*s1 != '\\0' && *s2 != '\\0' && *s1 == *s2) {
s1++;
s2++;

}
if (*s2=='\\0')
{
return (char*)p;
}
p++;
}
return NULL;

}

int main() {
char email[] = "zpw@bitejiuyeke.com";
char substr[] = "bitejiuyeke";
char* ret = my_strstr(email, substr);
if (ret == NULL)
{
printf("子串不存在\\n");
}
else
{
printf("%s\\n", ret);
}
return 0;
}

7,字符串分割函数:strtok

#include<stdio.h>
//==============================strtok===================================
//字符串分割函数
//
//int main() {
//const char* sep = "@.";
//char email[] = "zhangsanfengghhvkh@vcaaac.com";
//char cp[30] = { 0 };
//strcpy(cp, email);
//
//char* ret = strtok(cp, sep);
//printf("%s\\n", ret);
//
//ret = strtok(NULL, sep);//注意记忆性
//printf("%s\\n", ret);
//
//ret = strtok(NULL, sep);
//printf("%s\\n", ret);
//
//ret = strtok(NULL, sep);
//printf("%s\\n", ret);
//return 0;
//}
//
////上述代码的进一步优化
int main() {
const char* sep = "@.";
char email[] = "zhangsanfengghhvkh@vcaaac.com";
char cp[30] = { 0 };
strcpy(cp, email);

char* ret = NULL;
for ( ret = strtok(cp,sep); ret !=NULL; ret=strtok(NULL,sep))
{
printf("%s\\n", ret);
}
return 0;
}

8,执行失败的时候,设置错误码:strerror

#include<stdio.h>
//==============================strerror===================================
//c语言的库函数,在执行失败的时候,都会设置错误码
#include<errno.h>

int main() {
//printf("%s\\n", strerror(0));
//printf("%s\\n", strerror(1));
//printf("%s\\n", strerror(2));
//printf("%s\\n", strerror(3));
//printf("%s\\n", strerror(4));

//error c语言设置的一个全局的错误码存放的变量

FILE* pf = fopen("text.txt", "r");
if (pf==NULL)
{
printf("%s\\n", strerror(errno));
}
return 0;

}

赞(0)
未经允许不得转载:171主机测评 » C语言-字符串库函数
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址