C语言字符串处理函数

gets() && puts()

点击查看代码
#include<stdio.h>

int main(){
    char str[100];
    gets(str);
    puts(str);
    return 0;
}

/* char *gets(char *s)
功能:从标准输入读入字符,保存到指针s指定的空间,直到出现换行符或读到文件结尾
参数:
    s:字符串首地址
返回值:
    成功:返回读入的字符串的首地址
    失败:NULL 
与scanf("%s", str)的区别:
    gets(str)允许输入的字符串中有空格
    scanf("%s", str)不允许有空格,可以写成scanf("%[^\n]s", str)
注意:
    scanf和gets都无法知道要读入的字符串s的大小,必须遇到换行符或读到文件结尾为止,
    因此容易导致字符数组越绝,缓冲区溢出的情况。
*/

/* int puts(const char *s)
功能:在标准输出中输出s字符串,输出完成后自动输出一个'\n'
参数:
    s:字符串首地址
返回值:
    成功:非负数
    失败:-1 */

fgets() && fputs()

点击查看代码
#include<stdio.h>

int main(){
    char str[100];
    fgets(str, 100, stdin);
    fputs(str, stdout);
    return 0;
}

/* char *fgets(char *s, int size, FILE *stream)
功能:从stream指定的文件内读入字符,保存到s指定的内存空间。直到遇到换行符、读到文件
    结尾或已经读了size-1个字符位置,最后会自动加上字符'\0'作为字符串结束标志。
参数:
    s:要读入的字符串在内存中首地址
    size:指定最大读取字符串的长度(size-1)
    stream:文件指针,如果是读键盘输入的字符串,固定写为stdin
返回值:
    成功:成功读取的字符串
    读到文件尾或出错:NULL
注意:
    fgets()在读取通过键盘输入的字符串的时候,把用户输入的回车也看作字符串的一部分
    scanf和gets通过键盘读字符串时,不包含结尾的'\n'。
    但是,要优先保证最后一个字符是'\0',因此如果位置不够了,那么也可能不保留结尾的回车
    由于fgets()指定了要读取的字符串的长度,因此相比于gets和scanf来说,fgets是安全的
 */

/* int fputs(const char *str, FILE *stream)
功能:将str指定的字符串写入到stream指定的文件中,字符串结束符'\0'不写入文件
参数:
    str: 内存中字符串首地址
    stream:文件指针,如果要写到屏幕,则为stdout
返回值:
    成功:0
    失败:-1 */


strlen()

  • 注意strlen用来计算字符串有效长度,不能处理一般的字符数组,比如最后一个元素不是'\0'的字符数组,strlen会一直往后找一直到找到'\0'为止。

strcpy()


strncpy()

  • 有限拷贝不会将'\0'拷贝到目标字符串中去。即如果要拷贝的字符n超过了源字符串src的长度,那么剩余部分用'\0'填充,但是如果只拷贝少量字符到dest中去,则不会在dest中自动加上'\0'作为终止符(理论上是这样,实际不一定,,,,)。

strcat()

strcmp()

  • 比较的时候,是依次取出每一个字符然后比较ascii码。

sprintf()

  • 其实就是将多个可能是字符串也可能不是字符串的变量,都合并到一个字符串中去,比如下边的例子,把整型的123,和字符串"hello"合并到字符数组dest中去。即将多个变量格式化成一个字符串。
  • 格式化的方式与scanf,printf中相同。

sscanf()

  • 与sprintf相反,是将一个字符串拆分到多个变量中。

strchr()

  • 这没啥好说的,在一个字符串中查找某个字母第一次出现的位置,返回值是个地址

strstr()

  • 在一个字符串中查找另一个字符串

strtok()

  • 用分隔符来分解字符串,每次返回分割后的第一个字符串。需要注意的一点是,要不断分割就要不断调用strtok函数,但是从第二次调用开始第一个参数要用NULL,而不能是原字符串了,因为那个字符串已经被改变了,分隔符位置变成了'\0'。
  • 如果第二个参数是一个字符串,则字符串中的每个参数都可以作为分隔符。
  • 在while循环中再次分割时可以选用不同的分隔符
  • 不得不说的是,这个函数真jer难用。

atoi()

  • 就是把字符串转成数值类型。
  • 要转换的字符串中数字必须在前边,或者数字前边只有空格,像"hello 1222"这样的字符在前边的字符串是没办法转换的。
posted @   肖肖凯  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示