【让你从0到1学会c语言】字符串函数详解及模拟实现(二)

简介: 【让你从0到1学会c语言】字符串函数详解及模拟实现(二)
+关注继续查看

strcat函数:


strcat函数介绍:

image

用处:向一个字符串,追加另外一个字符串。

参数:第一个为原字符串,第二个为要追加的字符串。

返回值:为char*,为原字符串的首字符的地址(指针)。

头文件:#include<string.h>


 strcat函数注意点:

目标空间必须有足够的大,能容纳下源字符串的内容。

目标空间必须可修改。


strcat函数的使用:

例子代码:

int main()
{
    char p1[20] = "dfaw";
    char p2[20] = "sqqqq";
    strcat(p1, p2);
    printf("%s", p1);
    return 0;
}

运行结果: 

image


strcat函数模拟实现: 

原理:

先找原字符串的‘\0’的位置,从这个位置开始将要追加的字符串的字符一个个追加,注意:最后还是要有‘\0’的。

模拟实现: 

#include<stdlib.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
    char* start = dest;
    assert(dest != NULL && src != NULL);
    while (*dest != '\0')
        dest++;
    while (*src != '\0')
    {
        *dest = *src;
        dest++;
        src++;
    }
    *dest = '\0';
    return start;
}
int main()
{//模拟实现strcat函数
    char a[20] = "hellow";
    char b[10] = " word !";
    char* c;
    c = my_strcat(a, b);
    printf("%s\n", a);
    system("pause");
    return 0;
}

运行结果: 

image

strcmp函数: 


strcmp函数介绍:

image

 用处:比较两个字符串的大小。

参数:两个字符串指针。

返回值:为int类型,有三种可能,一种为0,一种为大于0的数,一种为小于0的数。

头文件:#include<string.h>


strcmp函数注意点(返回值):

strcmp函数要注意的是就它的返回值。

image

我们在上面说过,strcmp的返回值有三种可能。

标准规定:

  • 第一个字符串大于第二个字符串,则返回大于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串小于第二个字符串,则返回小于0的数字 


我们如何两个字符串如何比较:

两个字符串如何比较呢?


  • 第一个字符串的第一个字符与另外一个字符串的第一个字符比较ASCII码值,如果第一个大于第二个,就返回大于0,反之,就返回小于0.
  • 如果第一个字符串的第一个和另外一个字符串的第一个字符相等,就比较两者的第二个字符,以此类推,只有每一个字符都相等才返回0.

strcmp函数的使用:

例子代码:

int main()
{
    char p1[20] = "asjkd";
    char p2[20] = "ksd";
    int n=strcmp(p1, p2);
    if (n == 0)
        printf("两个相等\n");
    if (n > 0)
        printf("p1大\n");
    if(n<0)
        printf("p2大\n");
    return 0;
}

运行结果:

image


strcmp函数模拟实现:

原理:

将两者的字符串的每一个字符进行比较,如果不同,就返回结果,如果相同,就进行两者下一个字符的比较。当每一个字符都相等,才判断为两个字符串相等。

模拟实现: 

int my_strcmp(char* ch1, char* ch2)
{
    if (ch1 != ch2)
    {
        if (ch1 > ch2)
            return 1;
        else
            return 2;
    }
    ch1++;
    ch2++;
}
int main()
{//strcmp函数的模拟实现
    char* ch1 = "abcdefg";
    char* ch2 = 'acdw';
    int a=my_strcmp(ch1, ch2);
    if (a == 1)
        printf("ch1大");
    if (a == 2)
        printf("ch2大");
    return 0;
}

运行结果:

image


strncpy函数:

strncpy函数介绍:

image

 用处:这个就是strcpy函数的加强版,我们可以控制要复制的字符个数。还是为字符串复制函数。


参数:第一个为目标字符串的地址(指针),第二个为要复制的字符串的首字符的地址(指针),第三个为我们需要复制字符的个数。


返回值:返回值为目标字符串的地址。


头文件:#include<string.h>


strncpy函数注意点:

strncpy函数是拷贝num个字符从源字符串到目标空间。

如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。


strncpy函数的使用: 

例子代码:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
    char p[10]="sdafwa";
    char a[12] = "sdghj";
    int num = 3;
    strncpy(p, a, num);
    printf("%s", p);
    return 0;
}

运行结果:

image


strncpy函数的模拟实现: 

原理:

利用循环,然后将限制条件设为num,让它只复制num个字符就好。

模拟实现:

char* my_strncpy(char* goal, char* copy, int num)
{
    assert(goal);
    assert(copy);
    int i = 0;
    for (int i = 0; i < num; i++)
    {
 
        *(goal + i) = *(copy + i);
    }
    return goal;
}
int main()
{//模拟实现strncpy函数
    char* goal[20];//目标字符串
    scanf("%s", goal);
    printf("\n");
    char* copy[20];//要复制的字符串
    scanf("%s", copy);
    printf("\n");
    int num;
    scanf("%d", &num);
    char*p=my_strncpy(goal, copy, num);
    printf("%s", p);
    return 0;
}

运行结果:

image


strncat函数:


strncat函数介绍:

image

用处:这个也是strcat函数的加强版,可以控制想要的个数来追加字符串。


参数:第一个为目标字符串的地址(指针),第二个为要追加的字符串,第三个为你想要追加字符的个数。


返回值:为char*类型,是目标字符串的地址。


头文件:#include<string.h>


strncat函数的使用:

例子代码:

int main()
{//strncat函数的使用
    char p1[20]="dawff";
    char p2[10] = "siiiii";
    int num = 5;
    strncat(p1, p2, num);
    printf("%s", p1);
    return 0;
}

运行结果: 

image


strncat函数模拟实现: 

原理:

找到'\0'的位置,然后利用循环将追加的字符个数设为循环的判断条件,让它只追加num个字符。

模拟实现:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#include<math.h>
#define Tot 20
#define NUM 10
char* my_strncat(char* address, char* add, int num)
{
    assert(address);//断言防止错误
    assert(add);
    int len = (int)strlen(address);
    int remaining = Tot - len;//剩余空间
    char* p;
    int sz = (int)strlen(add);//追加函数大小
    if (sz >=num)
    {
        if (num < remaining)
        {
            p = address + len;
            int i;
            for (int i = 0; i < num; i++)
            {
                *(p + i) = *(add+i);
            }
            *(p + num) = '\0';
            return address;
        }
        else
            return NULL;
    }
    else
        return NULL;
}
int  main()
{//模拟实现strncat,追加n个字符的函数
    char arr[Tot];//原字符串
    printf("原字符串:");
    scanf("%s", arr);
    char add_char[Tot];//追加字符串
    printf("\n追加的字符串:");
    scanf("%s", add_char);
    int num;//追加的字符个数
    printf("\n追加的字符个数:");
    scanf("%d", &num);
    char* arr2=my_strncat(arr,add_char,num);
    if (arr2 == NULL)
    {
        printf("追加的字符串过大,无法追加\n");
    }
    else 
    printf("追加后的字符串:%s", arr2);
    return 0;
}


运行结果:

image


strncmp函数: 


strncmp函数介绍:

image


用处:这个也是strcmp函数的加强版。不过它是控制最多比较几个字符。


参数:第一个参数是第一个字符串,第二个参数是第二个字符串,第三个参数是我们想要的最多比较几个字符的个数。


返回值: 为int类型,有三种可能,一种为0,一种为大于0的数,一种为小于0的数。


头文件:#include<string.h>


strncmp函数注意点:

strncmp的注意点与strcmp函数一样都是为返回值,并且一样的。

image

我们在上面说过,strncmp的返回值有三种可能。


标准规定:

  • 第一个字符串大于第二个字符串,则返回大于0的数字
  • 第一个字符串等于第二个字符串,则返回0
  • 第一个字符串小于第二个字符串,则返回小于0的数字 

 strncmp函数的使用:

例子代码:

int main()
{
    char p1[10] = "afasa";
    char p2[10] = "afcqqqqq";
    int num = 2;
    int a=strncmp(p1, p2, num);
    if (a == 0)
    {
        printf("两者相等");
    }
    if (a > 0)
    {
        printf("p1大");
    }
    if (a < 0)
    {
        printf("p2大");
    }
    return 0;
}

运行结果: 

image

strncmp函数的模拟实现: 

原理:

每次循环判断一次大小,如果判断出来就返回,当num次后还没有比出大小,就返回0.

模拟实现: 

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<assert.h>
#define NUM1 20
#define NUM2 10
int my_strncmp(char* str1, char* str2, int num)
{
    assert(str1);
    assert(str2);
    int i;
    int flag = 0;
    for (int i = 0; i < num; i++)
    {
        if (*str1 != *str2)
        {
            if (*str1 > *str2)
            {
                flag++;
                return flag;
            }
            else
            {
                flag--;
                return flag;
            }
        }
    }
        return flag;
}
int main()
{
    char str1[NUM1];//第一个字符串
    printf("str1=");
    scanf("%s", str1);
    printf("\n");
    char str2[NUM2];//第二个字符串
    printf("str2=");
    scanf("%s", str2);
    printf("\n");
    int num;//需要比较的字符个数
    printf("要比较的字符个数num=");
    scanf("%d", &num);
    int p;//用来判断返回值
    p=my_strncmp(str1, str2, num);
    if(p == 0)
    {
        printf("两者相等");
    }
    if (p > 0)
    {
        printf("str1大");
    }
    if (p < 0)
    {
        printf("str2大");
    }
    return 0;
}

运行结果: 

image

相关文章
|
9天前
|
算法 C语言
征服C语言字符串函数(超详细讲解,干货满满)(下)
征服C语言字符串函数(超详细讲解,干货满满)
|
9天前
|
算法 C语言
征服C语言字符串函数(超详细讲解,干货满满)(上)
征服C语言字符串函数(超详细讲解,干货满满)
|
9天前
|
编译器 C语言 C++
C语言字符串函数,字符函数,内存操作函数
C语言字符串函数,字符函数,内存操作函数
121 0
|
20天前
|
C语言
一篇博客学会系列(1) —— C语言中所有字符串函数以及内存函数的使用和注意事项
一篇博客学会系列(1) —— C语言中所有字符串函数以及内存函数的使用和注意事项
38 0
|
20天前
|
C语言 C++
C语言之字符函数&字符串函数篇(2)
C语言之字符函数&字符串函数篇(2)
27 0
|
25天前
|
存储 C语言
C语言进阶-字符串函数和内存函数(2)
C语言进阶-字符串函数和内存函数
32 0
|
25天前
|
编译器 C语言 C++
C语言进阶-字符串函数和内存函数(1)
C语言进阶-字符串函数和内存函数
22 0
|
1月前
|
C语言
C语言学习系列-->字符函数和字符串函数
C语言学习系列-->字符函数和字符串函数
34 0
|
2月前
|
C语言
c语言——字符串函数和内存操作函数
c语言——字符串函数和内存操作函数
|
2月前
|
安全 测试技术 程序员
详解字符串函数与内存函数【C语言/进阶】
详解字符串函数与内存函数【C语言/进阶】
38 0
相关产品
云迁移中心
推荐文章
更多