C++————strcat、strncat、strcpy、strncy、strcmp、strncmp。

理解strcat、strncat、strcpy、strncy、strcmp、strncmp。

一.strcat追加字符串

1.strcat

①先使用一下strcat函数试试:

#include<stdio.h>
#include<string.h>
int main()
{
    char arr[12]="abcdef";
    char arr1[4]="ghi";
    strcat(arr,arr1);
    printf("%s\n",arr);
    return 0;
}

运行结果如下:

注意使用该函数的几点:
1.该函数使用时,目标字符数组的空间要大于资源字符数组的空间,否则会导致数组越界。
2.既然目标字符数组的空间要大于字符数数的空间间,那么目标字符数的大小就必须给定。

②模拟实现strcat:

#include<stdio.h>
#include<string.h>
char* my_strcat(char* arr,const char* arr1)
{
    char* temp = arr;
    while(*arr)
    {
        arr++;
    }
    while(*arr1)
    {
        *arr=*arr1;
        arr++;
        arr1++;
    }
    *arr=*arr1;
    return temp;
}
int main()
{
    char arr[12]="abcdef";
    char arr1[5]="ghie";
    my_strcat(arr,arr1);
    printf("%s\n",arr);
    return 0;
}

二:strncat函数

①使用strncat试试:

#include<stdio.h>
#include<string.h>
int main()
{
    char arr[12]="abcdef";
    char arr1[5]="ghie";
    int count = 3;
    strncat(arr,arr1,count);
    printf("%s\n",arr);
    return 0;
}
注意的事项:
使用该函数和使用strcat函数差不多,要注意数组越界问题。

②模拟实现strncat函数:

#include<stdio.h>
#include<string.h>
char* my_strncat(char* arr,const char* arr1,int count)
{
    char* temp = arr;
    while(*arr)
    {
        arr++;
    }
    while(count)
    {
        *arr=*arr1;
        arr++;
        arr1++;
        count--;
    }
    *arr=0;//等同于*arr='\0';不等同于*arr='0'
    return temp;
}
int main()
{
    char arr[12]="abcdef";
    char arr1[5]="ghie";
    int count = 3;
    my_strncat(arr,arr1,count);
    printf("%s\n",arr);
    return 0;
}

三.strcpy

①使用strcpy:

#include<stdio.h>
#include<string.h>
int main()
{
    char arr[12]="abcdefgs";
    char arr1[5]="hehe";
    strcpy(arr,arr1);
    printf("%s\n",arr);
    return 0;
}
使用该函数时应注意:数组越界问题!

②模拟实现此函数:

#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcpy(char* dest,const char* str)
{
    char* temp=dest;
    assert(dest&&str);
    while(*str)//当*str等于\0是进不去,所以要在后面对*dest赋\0;
    {
        *dest=*str;
        dest++;
        str++;
    }
    *dest=*str;//*dest='\0';
    return temp;
}
int main()
{
    char arr[12]="abcdefdg";
    char arr1[5]="hehe";
    my_strcpy(arr,arr1);
    printf("%s\n",arr);
    return 0;
}

四.strncpy

①使用strncpy:

代码如下
#include <stdio.h>
#include<string.h>
int main()
{
    char arr[12]="abcdefdg";
    char arr1[5]="hehe";
    strncpy(arr,arr1,4);
    printf("%s\n",arr);
    return 0;
}

②模拟实现strncpy:

#include<stdio.h>
#include<string.h>
char* my_strncpy(char* dest,const char* str,int count)
{
    char* temp = dest;
    while(count&&(*dest++=*str++))
    {
        count--;
    }
    if(count)
    {
        while(count)
        {
            *dest++='\0';
        }
    }
    return temp;
}
int main()
{
    char arr[12]="abcdefdg";
    char arr1[5]="hehe";
    my_strncpy(arr,arr1,4);
    printf("%s\n",arr);
    return 0; 
}

五.strcmp函数

①使用strcmp

代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
    char arr[12]="abcdefghd";
    char arr1[12]="abcdefghd";
    char arr2[12]="abcdeghd";
    int ret=strcmp(arr,arr1);
    int ret1=strcmp(arr,arr2);
    printf("%d %d\n",ret,ret1);
    return 0;
}

②模拟实现strcmp函数:

代码如下:
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* arr1,const char* arr2)
{
    assert(arr1);
    assert(arr2);
    while((*arr1!=0)&&(*arr2!=0))
    {
        if((*arr1==*arr2))
        {
            arr1++;
            arr2++;
        }
        else
            return *arr1-*arr2;//返回两字符相差的ASC码值
    }
    return *arr1-*arr2;
}
int main()
{
    char arr[12]="abcdefghd";
    char arr1[12]="abcdefghd";
    char arr2[12]="abcdeghd";
    int ret=my_strcmp(arr,arr1);
    int ret1=my_strcmp(arr,arr2);
    printf("%d %d\n",ret,ret1);
    return 0;
}

六.strncmp函数

①使用strncmp:

代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
    char arr[12]="abcdefg";
    char arr1[12]="abcdfg";
    int n=strncmp(arr,arr1,3);
    int m=strncmp(arr,arr1,5); 
    printf("%d %d\n",n,m);
    return 0;
}

②模拟实现strncmp

#include<stdio.h>
#include<string.h>
int my_strncmp(const char* str1,const char* str2,int count)
{
    while(count&&(*str1)&&(*str2))
    {
        if(*str1==*str2)
        {
            str1++;
            str2++;
            count--;
        }
        else
            return *str1-*str2;
    }
    return *str1-*str2;
}
int main()
{
    char arr[12]="abcdefg";
    char arr1[12]="abcdfg";
    int n=my_strncmp(arr,arr1,3);
    int m=my_strncmp(arr,arr1,5); 
    printf("%d %d\n",n,m);
    return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. atof(): 将字符串转换为double类型的值。 例如: ```c++ char str[] = "3.14"; double num = atof(str); printf("%f", num); ``` 结果为:3.140000 2. atoi(): 将字符串转换为int类型的值。 例如: ```c++ char str[] = "1234"; int num = atoi(str); printf("%d", num); ``` 结果为:1234 3. atol(): 将字符串转换为long类型的值。 例如: ```c++ char str[] = "1234567"; long num = atol(str); printf("%ld", num); ``` 结果为:1234567 4. strtod(): 类似于atof(),将字符串转换为double类型的值。 例如: ```c++ char str[] = "3.14"; double num = strtod(str, NULL); printf("%f", num); ``` 结果为:3.140000 5. strtol(): 将字符串转换为long类型的值,同时支持指定转换的基数(例如10进制、16进制等)和错误检查。 例如: ```c++ char str[] = "0110"; long num = strtol(str, NULL, 2); printf("%ld", num); ``` 结果为:6 6. strtoul(): 类似于strtol(),不过返回的是无符号的long类型。 例如: ```c++ char str[] = "0xA"; unsigned long num = strtoul(str, NULL, 16); printf("%lu", num); ``` 结果为:10 7. memset(): 将一段内存区域设置为指定的值。 例如: ```c++ char str[10]; memset(str, 'a', sizeof(str)); printf("%s", str); ``` 结果为:aaaaaaa 8. memcpy(): 将一段内存区域的内容复制到另一段内存区域。 例如: ```c++ char src[] = "hello"; char dst[10]; memcpy(dst, src, sizeof(src)); printf("%s", dst); ``` 结果为:hello 9. memmove(): 和memcpy()类似,但是保证在有重叠的情况下会正确工作。 例如: ```c++ char str[] = "hello"; memmove(str + 2, str, 3); printf("%s", str); ``` 结果为:hehlo 10. memcmp(): 比较两段内存区域的内容是否相等。 例如: ```c++ char str1[] = "hello"; char str2[] = "Hello"; int result = memcmp(str1, str2, 5); printf("%d", result); ``` 结果为:32(h和H的ASCII码差值) 11. memchr(): 在一段内存区域中搜索指定的字符,并返回指向该字符的指针。 例如: ```c++ char str[] = "hello"; char* ptr = (char*)memchr(str, 'l', 5); printf("%s", ptr); ``` 结果为:ll 12. strcpy(): 将一个字符串复制到另一个字符串。 例如: ```c++ char src[] = "hello"; char dst[10]; strcpy(dst, src); printf("%s", dst); ``` 结果为:hello 13. strncpy(): 类似于strcpy(),不过只会复制指定长度的字符。 例如: ```c++ char src[] = "hello"; char dst[10]; strncpy(dst, src, 3); dst[3] = '\0'; printf("%s", dst); ``` 结果为:hel 14. strcat(): 将一个字符串附加到另一个字符串的末尾。 例如: ```c++ char str1[] = "hello"; char str2[] = "world"; strcat(str1, str2); printf("%s", str1); ``` 结果为:helloworld 15. strncat(): 类似于strcat(),不过只会附加指定长度的字符。 例如: ```c++ char str1[] = "hello"; char str2[] = "world"; strncat(str1, str2, 3); printf("%s", str1); ``` 结果为:helloworld 16. strcmp(): 比较两个字符串是否相等。 例如: ```c++ char str1[] = "hello"; char str2[] = "world"; int result = strcmp(str1, str2); printf("%d", result); ``` 结果为:-15 17. strncmp(): 类似于strcmp(),不过只会比较指定长度的字符。 例如: ```c++ char str1[] = "hello"; char str2[] = "world"; int result = strncmp(str1, str2, 3); printf("%d", result); ``` 结果为:0 18. strchr(): 在一个字符串中搜索指定的字符,并返回指向该字符的指针。 例如: ```c++ char str[] = "hello"; char* ptr = strchr(str, 'l'); printf("%s", ptr); ``` 结果为:llo 19. strrchr(): 类似于strchr(),不过会从字符串的末尾开始搜索。 例如: ```c++ char str[] = "hello"; char* ptr = strrchr(str, 'l'); printf("%s", ptr); ``` 结果为:lo 20. strstr(): 在一个字符串中搜索指定的子字符串,并返回指向该子字符串的指针。 例如: ```c++ char str[] = "hello world"; char* ptr = strstr(str, "world"); printf("%s", ptr); ``` 结果为:world
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值