c/c++:gets(),fgets(),puts(),fputs(),strlen(),字符串拼接函数

c/c++:gets(),fgets(),puts(),fputs(),strlen(),字符串拼接函数

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出
【8】c/c++:类型限定符,printf输出格式,putchar,scanf,getchar
【9】c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
【10】c/c++:顺序结构,if else分支语句,do while循环语句,switch case break语句
【11】c/c++:for循环语句,分号不可省略,表达式可以省略,猜数字游戏,跳转语句continue,break,避免写goto
【12】c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法
【13】c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩
【14】c/c++:visual studio的代码快捷键,VS设置自定义默认代码,使用快捷键
【15】c/c++:三维数组,字符数组和字符串,统计字符串中字符出现的频次,scanf输入空格,正则匹配表达式


c/c++:gets()函数

在这里插入图片描述
返回一个char*字符指针
等价于char str[];
它获取一个字符串的首地址
指针嘛,之后我们会讲清楚,它就是地址

参数是你要存储的空间;
char *s;代表你要存储的地址

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<Windows.h>

void f51(void)
{
    //get string
    char str[100];
    gets(str);//

    printf("%s", str);
}

int main(void)
{
    f51();

    system("pause");
    return 0;
}

在这里插入图片描述
这比scanf简单一丢丢
不用搞格式了
直接gets(str),把字符串存入str中即可

在这里插入图片描述
这个好像可以直接获取空格哦

在这里插入图片描述
它和scanf一样,容易因为字符多输入而越界溢出
即不安全!!!!!!!!!!!!!

在这里插入图片描述

怎么更安全呢?fgets()函数

在这里插入图片描述
作用也是和gets一样的
参数多一点
char *s是字符串地址
size是字符数量??
读取字符串的位置,你看看是文件里面来的?还是键盘上读?
键盘对应stdin标准输入文件

返回值也会字符串的首地址哦

你一共定义一个10大小
它自动预留/0的位置
然后剩下的你可以放字符了

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<Windows.h>

void f51(void)
{
    //get string
    char str[10];
    //gets(str);//
    fgets(str, sizeof(str), stdin);//仨餐参数,它预留一个\0

    printf("%s", str);
}

int main(void)
{
    f51();

    system("pause");
    return 0;
}

在这里插入图片描述

在这里插入图片描述
看见没,它会提前给您把\0赶上去,
所以你最多只能输入9个字符哦

它好像会读走\n
如果你长度不足10
它就会自动读走\n

在这里插入图片描述
也就是空间足够的情况下,它可以考虑读一个\n
如果你字符占满了,空间不够的情况下,它基本就省掉了\n

在这里插入图片描述

puts()函数

在这里插入图片描述
类似printf
不过自动加\n

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<Windows.h>

void f51(void)
{
    //get string
    char str[10];
    //gets(str);//
    fgets(str, sizeof(str), stdin);//仨餐参数,它预留一个\0

    //printf("%s", str);

    puts(str);

}

int main(void)
{
    f51();

    system("pause");
    return 0;
}

在这里插入图片描述
好说吧

返回值:
非负数,成功
-1失败

在这里插入图片描述

fputs()函数

输出到指定文件,
studio的输出般stdout标准输出

后续我们将将其输出到文件
在这里插入图片描述
它不会写\0哦

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<Windows.h>

void f51(void)
{
    //get string
    char str[10];
    //gets(str);//
    fgets(str, sizeof(str), stdin);//仨餐参数,它预留一个\0

    //printf("%s", str);

    //puts(str);
    fputs(str, stdout);//标准输出


}

int main(void)
{
    f51();

    system("pause");
    return 0;
}

在这里插入图片描述
也不好自动给你加\n哦
懂?

因为我们的目的是写文件里面
写在屏幕上的话最好加\n
好说

easy

strlen()函数,很重要

在这里插入图片描述
获取字符串的有效长度,不包含\0


void f52(void)
{
    char str[] = "hello world";//11长度
    printf("%d\n", strlen(str));//string.h头文件下的操作函数

}

int main(void)
{
    f52();

    system("pause");
    return 0;
}

在这里插入图片描述
有效长度

使坏,给它中间放一个\0呢,它会识别为多少?
因为有效字符串是\0结束

strlen遇到\0就读结束哦

void f52(void)
{
    char str[] = "hello\0world";//11长度
    printf("%d\n", strlen(str));//string.h头文件下的操作函数

}

在这里插入图片描述
自己手撕strlen的代码,简单



void f52(void)
{
    char str[] = "hello\0world";//11长度
    printf("%d\n", strlen(str));//string.h头文件下的操作函数



    int index = 0;//索引
    int len = 0;//长度
    while (str[index++] != '\0')
    {//每次循环index加
        len++;
    }
    printf("%d\n", len);//string.h头文件下的操作函数

}

int main(void)
{
    f52();

    system("pause");
    return 0;
}

在这里插入图片描述
很容易了

字符串拼接函数,手撕代码

在这里插入图片描述
这种拼接,你可以自己写代码,也可以用函数
最后需要补一个\0
拼接

咱们手撕一波试试


void f53(void)
{
    char str1[] = "hello";
    char str2[] = "world";
    char str3[100] = { 0 };//循环拼接

    int i = 0;
    while (str1[i] != '\0')
    {//遇到结束
        str3[i] = str1[i++];//同时推进
    }
    int j = 0;
    while (str2[j] != '\0')
    {//遇到结束
        str3[i+j] = str2[j++];//同时推进
    }
    str3[i + j] = '\0';//手动补一个字符串结束

    puts(str1);
    puts(str2);
    puts(str3);

}

int main(void)
{
    f53();

    system("pause");
    return 0;
}

在这里插入图片描述


总结

提示:重要经验:

1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰露可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值