95886 发表于 2022-4-23 14:02

c语言 字符串常用API

#include<stdio.h>
int main()
{
       
        int i = 11;
        int a = {12,33,44};
       
        char c = 'c';
       
        //定义字符串第一种方式,和整型数组类似
        char str = {'a','b','c','d','e'};//类比整型数组
        for(i = 0;i<sizeof(str)/sizeof(str);i++){
                printf("%c ",str);
        }
        putchar('\n');
        //定义字符串第二种方式,和整型数组类似
        char str2 = "abcde";
        for(i = 0;i<sizeof(str2)/sizeof(str2);i++){
                printf("%c ",str2);
        }
        putchar('\n');
        //定义字符串第三种方式,和整型数组类似
        char str3[] = "abfbalfbjasffjkabfjabfj";//数组元素不写,会根据真实大小来默认分配
        for(i = 0;i<sizeof(str3)/sizeof(str3);i++){
               
                printf("%c ",str3);
        }
        putchar('\n');
        //数组名就是地址(大多数情况下)
        char *pstr = " hekkofdiajfajoja klmfk";//指针方式 ,如果操作不恰 ,内存非法,易造成段错误 segment error
        printf("%s\n",pstr);//字符串用格式占位符%s表示,不需要用i下标遍历
        putchar('\n');
        return 0;
}

#include<stdio.h>
#include<stdlib.h>
//字符串的存储方式字符串在内存中,除了有效字符外abc,还会自动在后面补一个'\0',作为字符串的结束标识
//真正计算有效字符的长度用strlen
int main()
{
       
        int a = {1,2,4};//连续的空间,整个数组的大小是   元素个数 X 元素类型大小
       
        printf("a数组的大小是:%d\n",sizeof(a));
        printf("数组的元素大小是:%d\n",sizeof(a));
        printf("数组的元素大小是:%d\n",sizeof(int));
        printf("数组的个数可以这么算,结果是:%d\n",sizeof(a)/sizeof(a));
       
/*        char a2 = {'a','b','c'};//连续的空间,整个数组的大小是   元素个数 X 元素类型大小
       
        printf("a2数组的大小是:%d\n",sizeof(a2));
        printf("数组的元素大小是:%d\n",sizeof(a2));
        printf("数组的元素大小是:%d\n",sizeof(char));
        printf("数组的个数可以这么算,结果是:%d\n",sizeof(a2)/sizeof(a2));
       
       
        char a3 = "abc";//连续的空间,整个数组的大小是   元素个数 X 元素类型大小
       
        printf("a2数组的大小是:%d\n",sizeof(a3));
        printf("数组的元素大小是:%d\n",sizeof(a3));
        printf("数组的元素大小是:%d\n",sizeof(char));
        printf("数组的个数可以这么算,结果是:%d\n",sizeof(a3)/sizeof(a2));
        //不写,数组的大小回个悲剧初始化的时候元素个数来确定
        */
        char a4[] = "abc";//连续的空间,整个数组的大小是   元素个数 X 元素类型大小
       
        printf("a2数组的大小是:%d\n",sizeof(a4));
        printf("数组的元素大小是:%d\n",sizeof(a4));
        printf("数组的元素大小是:%d\n",sizeof(char));
        printf("数组的个数可以这么算,结果是:%d\n",sizeof(a4)/sizeof(a4));//结果是4!!多了一个'\0',代表字符串结束标志
        // a4 = 'a';
        printf("%s\n",a4);
        int i = 0;;
        while (a4 != '\0'){
                printf("%c",a4);
                i++;
        }
        return 0;
}

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//计算字符串中字符的个数
//不能用sizeof来计算字符中有效字符的个数!!!应该要用strlen,它在计算字符串大小时,遇到'\0'后,就结束计数!hello\0world
/*
问题
网络通信,获取消息有乱码
协议,信息不匹配
*/
int main()
{
       
        int a[] = {1,2,3};
        printf("数组a的元素个数是: %d\n",sizeof(a)/sizeof(a));
       
        char a2 = "hello";
        printf("数组a2的元素个数是: %d\n",sizeof(a2)/sizeof(a2));
       
        printf("我们希望得到hello的真实字母个数,用strlen,%d\n",strlen(a2));
        return 0;
}

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
        char *str="穿刷回福建安徽覅";
       
        //puts(str);//自动加换行
        //printf("%s\n",str);
       
        //char pstr = {'\0'}; 1.申请空间2.初始化 把每一个元素初始化为'\0'
        char *pstr = NULL;//野指针 造成非法内存访问,会出现内段错误cmd窗口闪退
        pstr = (char*)malloc(128);//1.申请空间2.一旦用了malloc 一定要注意内存泄漏的问题 3.malloc可能会失败,要对返回值做判断
        if(pstr == NULL){
                printf("申请内存失败\n");
                exit(-1);
        }
        memset(pstr,'\0',128);                                                        //2.初始化 把每一个元素初始化为'\0'
        //1.初始化对象       2.初始化成什么字符   3.多大
        printf("请输入字符串:\n");
        //scanf("%s",pstr);
        gets(pstr);
        puts(pstr);
       
       
        system("pause");
        return 0;
}

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//char *strcpy(char* dest, const char *src);
int main()
{
        char *strDest;
        strDest = (char*)malloc(128);
        memset(strDest,'\0',128);
       
        char *strSrc = "yuagfd uyagsf" ;
       
        strcpy(strDest,strSrc);
        printf("复制字符串完毕,%s\n",strDest);
       
        /*memset(strDest,'\0',sizeof(strDest)/sizeof(strDest));
        strncpy(strDest,"fiashfio o");
        puts(strDest);
       
        memset(strDest,'\0',sizeof(strDest)/sizeof(strDest));
        strncpy(strDest,strSrc,3);//char *strncpy(char *destinin, char *source, int maxlen);
        puts(strDest);
        */
        char test[] = "符号IU暗黑风iuashjaspfkgiosj";
        strcat(test,strSrc);
        puts(test);
       
        char *str1 = "123";
        char *str2 = "123";
        /*
        int ret = strcmp(str1,str2);//int strcmp(const char *s1,const char *s2);
        printf("ret = %d\n",ret);
        if(ret == 0){
                printf("两个字符串一样\n");
        }*/
        if(!strcmp(str1,str2)){
                printf("两个字符串一样\n");
        }
       
        system("pause");
        return 0;
}#include<stdio.h>#include<stdlib.h>
#include<string.h>
/*
函数原型
char *strchr(const char *str, int c)
参数
str-- 要被检索的 C 字符串。
c-- 在 str 中要搜索的字符。
功能
在参数str所指向的字符串中搜索第一次出现字符c(一个无符号字符)的位置。
返回值
返回一个指向该字符串中第一次出现的字符的指针,如果字符串中不包含该字符则返回NULL空指针。
头文件
#include <string.h>
*/

/*
strstr()函数头文件:

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

    char *strstr( char *str, char * substr );
函数参数:

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

substr参数为要检索的子串。

函数返回值:

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

/*
原型:extern char *strlwr(char *s);
用法:#include <string.h>
功能:将字符串s参数转换为小写形式
说明:只转换s参数中出现的大写字母,不改变其它字符。返回指向s参数的指针。

*/

/*
strupr作用相反,用法一样
*/

/*
下面是 strtok() 函数的声明。

char * strtok ( char * str , const char * delim )   
参数
str -- 要被分成一组小字符串的字符串。
delim -- 包含字符的C字符串。
返回值
该函数返回被第一个子字符串,如果没有可检索的字符串,则返回一个指针。
*/
int main()
{
        char *str = "hcvuaifh";
        char c = 'i';
       
        char *p = NULL;
       
        /*p = strchr(str,c);
        if(p == NULL){
                printf("没找到\n");
        }else{
                printf("找到\n");
                puts(p);
        }*/
       
       
        char *substr = "if";
       
        /*p = strstr(str,substr);
        if(p == NULL){
                printf("没找到\n");
        }else{
                printf("找到\n");
                puts(p);
        }*/
       
        char str1[] = "Hello World";//Windows环境下 要定义成数组的形态否则会崩溃 Linux环境下可以
        //puts(strlwr(str1));
        //puts(strupr(str1));
       
        char str2[] = "sduihg,psodkgops,hfuios,熬鹰,放假";
        char *psubs;
       
        int i = 1;
        p = strtok(str2,",");
        if(p !=NULL){
        //printf("获取到第%d个串p = %s\n",i++,p);
                psubs = p;
        }
        while(1){
                i++;
                p = strtok(NULL,",");
                if(p !=NULL){
                //printf("获取到第%d个串 p =%s\n",i,p);
                        psubs = p;
                }else{
                        //printf("没有子串了\n");
                        break;
                }
               
        }
        for(int j = 0;j<i;j++){
                puts(psubs);
        }
        /*//获取第二个串的方式很奇葩,跟第一次不一样的是,目标字符串改成NULL
        p = strtok(NULL,",");
        printf("获取第二个串p = %s\n",p);
        //获取第3个串的方式很奇葩,跟第一次不一样的是,目标字符串改成NULL
        p = strtok(NULL,",");
        printf("获取第3个串p = %s\n",p);
       
        p = strtok(NULL,",");
        printf("获取第4个串p = %s\n",p);
       
        p = strtok(NULL,",");
        printf("获取第5个串p = %s\n",p);
       
        p = strtok(NULL,",");
        if(){
                printf("没有子串了\n");
        }else{
        printf("获取第6个串p = %s\n",p);}*/
       
       
        system("pause");
        return 0;
}

wls 发表于 2022-4-23 14:21

C字符串转化为数字 有更便捷的方式吗?
感谢楼主辛苦整理,受用了,收藏起来,学习!

xiadongming 发表于 2022-4-23 15:04

wihn 发表于 2022-4-23 15:23

wls 发表于 2022-4-23 14:21
C字符串转化为数字 有更便捷的方式吗?
感谢楼主辛苦整理,受用了,收藏起来,学习!

用sscanf函数,用法和scanf几乎一样。

雪流星 发表于 2022-4-23 18:10

wls 发表于 2022-4-23 14:21
C字符串转化为数字 有更便捷的方式吗?
感谢楼主辛苦整理,受用了,收藏起来,学习!

用atoi函数

A学习的小菜鸟 发表于 2022-4-24 10:34

哦哦,算是明白了,你是自己实现字符串函数的吧,这样也是,可以更好的了解指针的用法,我当时也是这么做的,楼主加油啊

95886 发表于 2022-4-24 11:23

A学习的小菜鸟 发表于 2022-4-24 10:34
哦哦,算是明白了,你是自己实现字符串函数的吧,这样也是,可以更好的了解指针的用法,我当时也是这么做的 ...

一起加油,我也是刚开始学习。
页: [1]
查看完整版本: c语言 字符串常用API