C语言详细讲解常用字符串处理函数

目录
  • 一、strlen()
    • 1. 函数原型:
    • 2. 手动实现:
  • 二、strcat()
    • 1. 函数原型:
    • 2. 手动实现:
  • 三、strcpy()
    • 1. 函数原型:
    • 2. 手动实现:
  • 四、strcmp()
    • 1. 函数原型:
    • 2. 手动实现:
  • 五、memset()
    • 1. 函数原型:
    • 2. 手动实现:

一、strlen()

1. 函数原型:

size_t strlen(const char *str)

参数str: 要计算的字符串的长度
返回值: 返回字符串 str 的长度,直到遇到结束字符'\0',但不包括结束字符。
size_t 是一个无符号整数类型。

2. 手动实现:

源代码:

#include <stdio.h>
#include <string.h>
size_t my_strlen(const char *str)
{
    size_t len = 0;
    while (*str++ != '\0') {
        len++;
    }
    return len;
}
int main()
{
    char *p = "hello world";
    int len_1 = 0, len_2 = 0;

    len_1 = my_strlen(p);
    len_2 = strlen(p);
    printf("len_1 = %d, len_2 = %d\n", len_1, len_2);
    return 0;
}

运行结果:

len_1 = 11, len_2 = 11

二、strcat()

1. 函数原型:

char *strcat(char *dest, const char *src)

参数1: 目标字符串,该空间需要足够容纳后续追加的字符串。
参数2: 要追加的字符串。
返回值: 返回指向目标字符串的指针。

2. 手动实现:

源代码:

#include <stdio.h>
#include <string.h>
char *my_strcat(char *dest, const char *src)
{
    while (*dest != '\0') {
        dest++;
    }
    while (*src != '\0') {
        *dest++ = *src++;
    }
    *dest = '\0';
    return dest;
}
int main()
{
    char p1[20] = "hello ";
    char p2[20] = "hello ";
    char *q = "world";
    my_strcat(p1, q);
    strcat(p2, q);
    printf("p1 = %s, p2 = %s\n", p1, p2);
    return 0;
}

运行结果:

p1 = hello world, p2 = hello world

三、strcpy()

1. 函数原型:

char *strcpy(char *dest, const char *src)

参数1: 要存储的目标字符串。
参数2: 要复制的字符串。
返回值: 返回指向目标字符串的指针。

2. 手动实现:

源代码:

#include <stdio.h>
#include <string.h>
char *my_strcpy(char *dest, const char *src)
{
    while (*src != '\0') {
        *dest++ = *src++;
    }
    *dest = '\0';
    return dest;
}
int main()
{
    char p1[20] = {'\0'};
    char p2[20] = {'\0'};
    char *q = "hello world";
    my_strcpy(p1, q);
    strcpy(p2, q);
    printf("p1 = %s, p2 = %s\n", p1, p2);
    return 0;
}

运行结果:

p1 = hello world, p2 = hello world

四、strcmp()

1. 函数原型:

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

参数1: 要比较的第一个字符串
参数2: 要比较的第二个字符串
返回值:
    如果返回值 < 0,则表示 str1 小于 str2。
    如果返回值 > 0,则表示 str1 大于 str2。
    如果返回值 = 0,则表示 str1 等于 str2。

2. 手动实现:

源代码:

#include <stdio.h>
#include <string.h>
int my_strcmp(const char *str1, const char *str2)
{
    int ret = 0;
    while ((*str1 != '\0') && (*str1 == *str2)) {
        str1++;
        str2++;
    }
    ret = *str1 - *str2;
    return ret;
}
int main()
{
    char p1[20] = {"hello world"};
    char p2[20] = {"hello aorld"};
    int ret_1, ret_2;
    ret_1 = my_strcmp(p2, p1);
    ret_2 = strcmp(p2, p1);
    printf("ret_1 = %d, ret_2 = %d\n", ret_1, ret_2);
    return 0;
}

运行结果:

ret_1 = -22, ret_2 = -22

五、memset()

1. 函数原型:

void *memset(void *str, int c, size_t n)

参数1: 要设置的内存块
参数2: 要填充的值,在填充内存块时是使用该值的无符号字符形式。
参数3: 填充的字符个数。
返回值: 返回指向str的指针。

2. 手动实现:

源代码:

#include <stdio.h>
#include <string.h>
void *my_memset(void *str, int c, size_t n)
{
    if (str == NULL)
        return NULL;
    char *pstr = (char*)str;
    while (n-- > 0) {
        *pstr++ = c ;
    }
    return str;
}
int main()
{
    char p1[20] = {"hello world"};
    char p2[20] = {"hello world"};
    my_memset(p1, '*', 5);
    memset(p2, '*', 5);
    printf("p1 = %s, p2 = %s\n", p1, p2);
    return 0;
}

运行结果:

p1 = ***** world, p2 = ***** world

到此这篇关于C语言详细讲解常用字符串处理函数的文章就介绍到这了,更多相关C语言字符串函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言封装函数字符串练习汇总分享

    目录 封装函数: 判断闰年和平年 封装函数: 字符串查找(参考strstr) 封装函数: 字符串比较(参考strcmp) 封装函数: 字符串拼接(参考strcat) 封装函数: 字符串转整数(参考atoi) 封装函数: 字符串转浮点数(参考atof) 封装函数: 整数转字符串 123 “123” 封装函数: 浮点数转字符串 123.456 – “123.456” 封装函数: 判断回文字符串 封装函数: 字符串替换 封装函数: 清除二维数组的指定行 封装函数:字符串里所有大写字母互相替换 封装GP

  • C语言详细分析常见字符串函数与模拟实现

    目录 一. strlen(求长度) 二. strcpy(拷贝) 三.strcat(追加) 四.strcmp 五.strncpy 六.strncat 七.strncmp 八.strstr 九.strtok 十.strerror 十一.memcpy 十二.memmove 十三.memcmp 十四.memset 一. strlen(求长度) size_t  strlen ( const char * str ) 函数的返回值类型为size_t,为无符号数,且strlen返回值为字符串中‘\0’前的字符

  • C语言中操作字符串的函数详解

    目录 一.函数表 二.strlen 实例 三.strcmp 实例 四.strcpy 实例 五.stract 实例 六.strchr 实例 总结 一.函数表 函数名 函数 功能 strlen size_t strlen(const char* s); 返回字符串 s 的长度(不包括结尾的0) strcmp int strcmp(const char* s1, const char* s2); 比较两个字符串,返回:如果 s1 == s2,返回 0:如果 s1<s2 则返回小于 0 (如 -1):如

  • C语言超详细讲解字符串函数和内存函数

    目录 字符串函数 长度不受限制的字符串函数 strlen strcpy strcat strcmp 长度受限制的字符串函数介绍 strncpy strncat strncmp 字符串查找以及错误报告 strstr strtok strerror 内存操作函数 memcpy memmove memcmp 字符串函数 长度不受限制的字符串函数 strlen size_t strlen ( const char * str ) 求字符串长度: 字符串以'\0' 作为结束标志,strlen函数返回的是在

  • C语言实例问题探究字符串函数的应用

    目录 一.典型问题一 二.典型问题二 三.典型问题三 四.典型问题四 一.典型问题一 下面的程序输出什么?为什么? 分析 snprintf 函数本身是可变参数函数,原型如下:int snprintf( char* buffer, int buf_size, const char*fomart,... ) 当函数只有 3 个参数时,如果第三个参数没有包含格式化信息,函数调用没有问题:相反,如果第三个参数包含了格式化信息,但缺少后续对应参数,则程序行为不确定. 下面编程看看究竟会输出什么: #inc

  • C语言字符串函数与内存函数精讲

    目录 strlen strcpy strcat strcmp strncpy strncat strncmp strstr strtok strerror tolower\toupper memcpy memmove memcmp memset strlen 获取字符串长度. strlen - size_t strlen( const char *string ); 1.字符串以’\0’作为结束标志,strlen函数返回的是在字符串中’\0’前面出现的字符个数(不包含’\0’). 2.参数指向的

  • C语言超全面讲解字符串函数

    目录 1.gets函数 2.puts函数 3.strcat函数 4.strcpy函数(strncpy函数) 5.strcmp函数(strncmp函数) 6.strlen函数 7.strlwr函数 8.strupr函数 9.strstr函数 注意:在使用字符串处理函数时,一定要使用#include <string.h>开头 1.gets函数 其形式为:gets(字符数组)——输入字符串的函数 作用是从终端输入一个字符串到字符数组,并且得到一个函数值. 2.puts函数 其形式为:puts(字符数

  • C语言详细讲解常用字符串处理函数

    目录 一.strlen() 1. 函数原型: 2. 手动实现: 二.strcat() 1. 函数原型: 2. 手动实现: 三.strcpy() 1. 函数原型: 2. 手动实现: 四.strcmp() 1. 函数原型: 2. 手动实现: 五.memset() 1. 函数原型: 2. 手动实现: 一.strlen() 1. 函数原型: size_t strlen(const char *str) 参数str: 要计算的字符串的长度返回值: 返回字符串 str 的长度,直到遇到结束字符'\0',但不

  • C语言详细讲解strcpy strcat strcmp函数的模拟实现

    目录 一.模拟实现strcpy函数 二.模拟实现strcat函数 三.模拟实现strcmp函数 四.小结 一.模拟实现strcpy函数 strcpy函数是字符串拷贝函数,就是将源字符串拷贝到目标空间中. char * strcpy ( char * destination, const char * source );//库函数中的声明 将源(source)指向的c字符串复制到目标(destination)指向的数组中,包括终止的空字符(并在该点停止). 为避免溢出,目标(destination

  • C++详细讲解常用math函数的用法

    目录 1.fabs(double x) 2.floor(double x)ceil(double x) 3.pow(double x,double n) 4.sqrt(double x) 5.log(double x) 6.sin(double x)cos(double x) tan(double x) 7.round(double x) 包含头文件 #include<cmath> 1.fabs(double x) 对double型变量取绝对值 #include<iostream>

  • C语言详细讲解注释符号的使用

    目录 一.注释规则 二.注释中一个有趣的问题 三.教科书型注释 四.迷惑型的注释 五.忽悠型注释 六.搞笑型注释 七.漂亮的程序注释 八.小结 一.注释规则 编译器在编译过程中使用空格替换整个注释 字符串字面量中的 // 和 /*...*/ 不代表注释符号 /*......*/ 型注释不能被嵌套 下面看一下这样一段代码: #include <stdio.h> int main() { int/*...*/i; char* s = "abcdefgh //hijklmn";

  • C语言详细讲解指针数组的用法

    目录 1. 指针数组定义方法 2. 指针的指针(二级指针) 3. 字符串和指针 4. 数组指针 定义方法 数组指针的用法 1. 指针数组定义方法 格式: 类型说明符 *数组名[ 元素个数 ] int *p[10]; // 定义了一个整型指针数组p,有10个元素,都是int *类型的变量 指针数组的分类: 同指针类型的分类,见上一篇 大多数情况下,指针数组都用来保存多个字符串. #include <stdio.h> int main() { char *name[5] = {"Hell

  • Golang strings包常用字符串操作函数

    目录 func Contains func HasPrefix func HasSuffix func Replace func Split func ToLower func ToUpper func Repeat func Count func Index func Join 在编写代码的时候最常用到的就是字符串了,Golang 中的字符串统一使用 UTF-8 (属于Unicode编码的一种实现方式)进行编码,本篇文章将结合具体实例对常用的字符串操作函数进行介绍. func Contains

  • C语言 详细讲解数组参数与指针参数

    目录 一.C语言中的数组参数退化为指针的意义 二.二维数组参数 三.等价关系 四.被忽视的知识点 五.小结 一.C语言中的数组参数退化为指针的意义 C 语言中只会以值拷贝的方式传递参数 当向函数传递数组时: 将整个数组拷贝一份传入函数        × 将数组名看做常量指针传数组首元素地址    √ C 语言以高效作为最初设计目标: a) 参数传递的时候如果拷贝整个数组执行效率将大大下降. b) 参数位于栈上,太大的数组拷贝将导致栈溢出. 二.二维数组参数 二维数组参数同样存在退化的问题 二维数

  • C语言详细讲解通过递归实现扫雷的展开

    目录 用户选择菜单 棋盘初始化 布置雷(随机布置) 打印棋盘 玩家下棋 棋盘展开 展开部分思维导图 展开函数最后一个else return 作用 周围雷个数判断 用户选择菜单 void menu() { printf("****************************\n"); printf("******** 1.play **********\n"); printf("******** 0.exit **********\n"); p

  • C语言详细讲解if语句与switch语句的用法

    目录 一.if 语句 二.switch 语句 三.错误提示 一.if 语句 格式: if(写条件){输出内容}条件为真运行这个. else {输出内容}否则输出这个. 代码: #include <stdio.h> int main(void) { int score; //定义一个变量 score printf("请输入你的分数:"); scanf("%d",&score); //键盘输入你想要的分数 if (score>700) //给出

随机推荐