学习笔记13-C语言-字符串函数、缓冲区

字符串的常用函数:

#include<string.h>
size_t strlen(const char* s);
功能:计算字符串长度,但是结果不包括'\0'
返回值:返回字符串中字符的个数

size_t str_len(const char* str)
{
    assert(NULL != str);
    const char* tmp = str;
    while(*tmp) tmp++;
    return tmp - str;
}

char *strcpy(char* dest,const char *src);
功能:把src拷贝到dest中,相当于给dest赋值 = 
返回值:dest(链式调用)

char* str_cpy(char* dest, const char* src)
{
    assert(NULL != dest && NULL != src);
    char* tmp = dest;
    while(*tmp++ = *src++);
    return dest;
}

char *strcat(char *dest, const char *src);
功能:把src的内容追加到dest的后面,相当于dest +=
返回值: dest

char* str_cat(char *dest, const char *src)
{
    assert(NULL != dest && NULL != src);
    char* tmp = dest;
    while(*tmp) tmp++;
    while(*tmp++ = *src++);
    return dest;
}

char strcmp(const char *s1,const char *s2);
功能:比较两个字符串,根据字典序比较,谁在前谁小
返回值:
    s1==s2      0
    s1>s2       正数
    s1<s2       负数

int str_cmp(const char *s1, const char *s2)
{
    assert(NULL != s1 && NULL != s2);
    while(*s1 && *s1 == *s2) s1++,s2++;
    //return *s1 - *s2;

    if(*s1 > *s2)
        return 1;
    else if(*s1 < *s2)
        return -1;
    return 0;
}    

char strncmp(const char *s1,const char *s2,size_t n);
功能:比较前n个

char *strncpy(char *dest,const char *src,size_t n);
功能:把src拷贝n个字符到dest中

char *strncat(char *dest, const char *src,size_t n);
功能:追加n个字符到dest后面

练习1:实现strlen、strcpy、strcmp、strcat四个函数

#include<stdlib.h>
int atoi(const char *nptr);
功能:把字符串转成int类型

long atol(const char *nptr);
功能:把字符串转成long类型

long long atoll(const char *nptr);
功能:把字符串转成long long类型

double atof(const char *nptr);
功能:把字符串转成double类型

#include<string.h>
char *strstr(const char *haystack,const char *needle);
功能:查找haystack中是否有needle
返回值:返回needle在haystack中第一次出现的位置,如果找不到NULL

 sprintf:字符串拼接(各种类型数据合成字符串)
 int sprintf(char* str,const char* format,...);
 功能:把各种类型的数据输出到str中。
 返回值:字符串长度

sscanf:字符串的解析(分解成各种类型字符串)
int sscanf(const char* src,const char* format,...);
功能:从src中按照格式读取数据
返回值:成功读取到的变量个数

输出缓冲区:

程序输入的数据并不能立即显示到屏幕上,而是先存储到输出缓冲区中,当满足一定条件时才会显示出来:
    1、遇到\n后
    2、当程序结束时
    3、遇到输入语句
    4、当输出缓冲区满4k时
    5、手动刷新 fflush(stdout)

    缓冲区机制是可以提高数据的读写速度,可以让告诉的CPU与低速的输入输出设备之间协调工作。

输入缓冲区:

程序并不会立即获取到从键盘上输入的数据,而是当按下回车键时程序才会冲输入缓冲区中读取数据。
1、当读取整型或者浮点型数据时,而缓冲区中的数据    是字母或符号时,此时,读取失败,而且数据会残留在缓冲区,
就会影响接下来所有数据的读取
2、fgets(str,10,stdin)可以指定读取size-1个字符,如果有多余的字符会残留在输入缓冲区中。
3、当先输入整型或者浮点型数据,在立即输入字符、字符串时,会有一个\n残留在输入缓冲区,影响了下面的字符、字符串的输入
    方法1:必须确定输入缓冲区中有垃圾数据才能使用
        scanf("%*[^\n]");   *表示缓冲区中接受一个字符并丢弃,只要这个字符不是\n,继续,如果是\n则停下
        scanf("%c");        丢弃一个字符,则丢弃的是\n
    方法2:只能在Linux系统下使用
        stdin->_IO_read_ptr = stdin->_IO_read_end;  
    方法3:
        根据scanf返回值判断是否读取成功,如果不成功则先清空缓冲区然后重新读取,直到成功为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值