字符串常用API

  • 头文件
  • 2
  • 2.1puts(输出)
  • 2.1.1函数原型
  • 2.1.2例子
  • 2.1.3附加说明
  • 2.2 野指针介绍
  • 2.2.1例子
  • 2.3 gets(输入)
  • 2.3.1函数原型
  • 2.3.2例子
  • 2.4 strlen(计算长度)
  • 2.4.1函数原型
  • 2.4.2例子
  • 2.4 strcpy(字符串拷贝一)
  • 2.5.1 函数原型
  • 2.5.1 例子
  • 2.5 strncpy(字符串拷贝二)
  • 2.5.1 函数原型
  • 2.5.2 例子
  • 2.6 strcat(字符串拼接)
  • 2.6.1 函数原型
  • 2.6.1 例子
  • 2.7 strcmp(字符串比较)
  • 2.7.1 函数原型
  • 2.7.2 例子
  • 2.8 strchr(查找字符)
  • 2.8.1 函数原型
  • 2.8.2 例子
  • 2.9 strstr(查找子字符串)
  • 2.9.1 函数介绍
  • 2.9.2 例子
  • 2.10 strlwr(大写转小写)
  • 2.10.1 函数介绍
  • 2.10.2 例子
  • 2.10 strupr(小写转大写)
  • 2.11 strtok(字符串的切割)
  • 2.11.1 函数介绍
  • 2.11.2 例子


头文件

#include<string.h>

2

2.1puts(输出)

2.1.1函数原型

int puts(const char *s);

2.1.2例子

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

int main()
{
        char *str = "NuoMiNuoMi QiangDeYiPi!";

        puts(str);

        printf("%s\n",str);
        return 0;
}

运行结果

字符串压缩 golang redis 字符串压缩API_api

2.1.3附加说明

上面例子可以看出puts函数输出的字符串会自动加一个换行。

2.2 野指针介绍

2.2.1例子

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

int main()
{
        char *str = NULL;

        printf("请输入字符串:");
        scanf("%s",str);

        puts(str);

        return 0;
}

运行上面代码结果,出现段错误:

字符串压缩 golang redis 字符串压缩API_字符串_02


原因:代码中str雀食是一个野指针(给NULL了还是野指针,不给更是野指针)啊,不能对其进行操作,再说一次,不能对野指针进行操作,需要给其开辟空间后才可以,在代码中加上:

str = (char *)malloc(128);//malloc有时可能会失败,失败时候返回值为NULL,可自行判断

或者加上

memset(str,'\0',128);

解决问题,运行结果为

字符串压缩 golang redis 字符串压缩API_api_03

2.3 gets(输入)

2.3.1函数原型

char *gets(char *s);

2.3.2例子

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        char *str;
        str = (char *)malloc(128);
        printf("请输入字符串:\n");
        gets(str);
        puts(str);
        return 0;
}

运行结果

字符串压缩 golang redis 字符串压缩API_api_04

2.4 strlen(计算长度)

2.4.1函数原型

size_t strlen(const char *s);

2.4.2例子

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        char *str = "NuoMiNuoMi QiangDeYiPi!";
        int len = strlen(str);
        printf("字符串的长度为:%d\n",len);
        return 0;
}

运行结果:

字符串压缩 golang redis 字符串压缩API_字符串_05


附加说明:strlen函数不会将字符串结束符‘\0’算入长度,但sizeof会将字符串的结束符‘\0’算入。

2.4 strcpy(字符串拷贝一)

2.5.1 函数原型

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

2.5.1 例子

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        char str1[128] = {'\0'};
        char *str2 = "糯米糯米强的一批";
        strcpy(str1,str2);
        printf("将字符串2复制给字符串1的结果为:\n");
        puts(str1);
        return 0;
}

字符串压缩 golang redis 字符串压缩API_#include_06

2.5 strncpy(字符串拷贝二)

2.5.1 函数原型

char *strncpy(char *dest, const char *src, size_t n);

2.5.2 例子

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        char str1[128] = {'\0'};
        char *str2 = "糯米糯米强的一批";
        strncpy(str1,str2,13);
        printf("将字符串2复制给字符串1的结果为:\n");
        puts(str1);
        return 0;
}

运行结果

字符串压缩 golang redis 字符串压缩API_#include_07

2.6 strcat(字符串拼接)

2.6.1 函数原型

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

2.6.1 例子

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        char str1[128] = "糯米糯米";
        char *str2 = "强的一批";
        
        strcat(str1,str2);
        printf("将字符串1和字符串2拼接结果为:\n");
        puts(str1);
        return 0;
}

运行结果

字符串压缩 golang redis 字符串压缩API_字符串_08

2.7 strcmp(字符串比较)

2.7.1 函数原型

int strcmp(const char *s1, const char *s2);

返回值: s1和s2相等返回0
s1小于s2返回-1
s1大于s2返回

2.7.2 例子

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        char str1[128] = "123";
        char *str2 = "123";
        int ret = strcmp(str1,str2);
        printf("ret = %d\n",ret);
        if(ret == 0){
                printf("俩字符串相等\n");
        }
        return 0;
}

运行结果:

字符串压缩 golang redis 字符串压缩API_字符串_09

2.8 strchr(查找字符)

2.8.1 函数原型

char *strchr(const char *str, char c)

在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置。
参数:
str-- 要被检索的 C 字符串。
c-- 在 str 中要搜索的字符。

2.8.2 例子

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        char *str = "nuominuomiqiangdeyipi";
        char c = 'q';
        char *p;
        p = strchr(str,c);
        if(p == NULL){
                printf("没有找到\n");
        }else{
                printf("找到了\n");
                puts(p);
        }
        return 0;
}

字符串压缩 golang redis 字符串压缩API_c语言_10

2.9 strstr(查找子字符串)

2.9.1 函数介绍

strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:

char *strstr( char *str, char * substr );

函数参数:

str参数为要检索的字符串,

substr参数为要检索的子串。

函数返回值:

返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。

2.9.2 例子

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        char *str = "nuominuomiqiangdeyipi";
        char *substr = "deyi";
        char *p = NULL;
        p = strstr(str,substr);
        if(p == NULL){
                printf("没有找到\n");
        }else{
                printf("找到了\n");
                puts(p);
        }
        return 0;
}

运行结果

字符串压缩 golang redis 字符串压缩API_api_11

2.10 strlwr(大写转小写)

2.10.1 函数介绍

函数原型

char *strlwr(char *s);

功能:将字符串s参数转换为小写形式

2.10.2 例子

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        char str[] = "NuoMiNuoMi";

        strlwr(str);

        puts(str);
        
        system("pause");

        return 0;

}

注意:这个函数在定义str时,在windows下要定义成数组形态,否则崩溃。

运行结果

字符串压缩 golang redis 字符串压缩API_api_12

2.10 strupr(小写转大写)

跟strlwr类似。。

2.11 strtok(字符串的切割)

2.11.1 函数介绍

char *strtok(char *str, const char *delim)

参数:
str – 要被分解成一组小字符串的字符串。
delim – 包含分隔符的 C 字符串。
返回值
该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。

2.11.2 例子

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        char str[128] = "Qiang,de,yi,pi";

        char *p;
        int i=1;
        char s[28]=  ",";
        p = strtok(str,s);

        printf("获取到第一个字符串为:%s\n",p);
        while(1){
                i++;
                p = strtok(NULL,",");
                if(p != NULL){
                        printf("获取到第%d个字符串:%s\n",i,p);
                }else{
                        printf("没有子串了\n");
                        break;
                }
        }
        return 0;
}

注意第一次查找的时候要被分割的字符串为原字符串,后面被分割的字符串为NULL。

运行结果

字符串压缩 golang redis 字符串压缩API_api_13