字符

字符:

​ 字符就是符号或图案,在c代码是以整数形式模的,当需要显示时再根据ASCII 表的对应关系显示出响应的符号或者图案。

‘ 0 ’ 48

‘ A ' 65

’ a ‘ 97

’ \0 ‘ 0

关于字符的函数:

头文件都是 #include <ctype.h>

int isalnum( int ch );

功能:如果参数是数字或字母字符,函数返回非零值,否则返回零值。

int isalpha( int ch );

功能:如果参数是字母字符,函数返回非零值,否则返回零值。

int isdigit( int ch );

功能:如果参数是0到9之间的数字字符,函数返回非零值,否则返回零值.

 int islower( int ch );

功能:如果参数是小写字母字符,函数返回非零值,否则返回零值。

 int isupper( int ch );

功能:如果参数是大写字母字符,函数返回非零值,否则返回零值。

int isxdigit( int ch );

功能:如果参数是十六进制数字字符(即:A-F, a-f, 0-9),函数返回非零值,否则返回零值。

字符串:

​ 由字符组成的串型结构,结束标志是 ' \0 '。

串型结构:

由相同的类型的数据组成,有一个确定的结束标志,对数据的处理是连续的直到遇见结束标志为止。

字符串字面值:

    1. 由“双引号包含的若干个字符”,存储在代码段,以地址形式呈现
       2. 末尾有隐藏的‘ \0 ',使用sizeof对字符串字面值进行计算可以看出
       3. 虽然以地址形式呈现,但他是与数组名相应的地址,所以是以sizeof计算出的是字符数量+1,而不是4
       4. 可以用const char* 指针变量存储他们的地址,长期使用。不可以强行修改不然会有段错误产生,不可以修改代码段。汉字在Windows2字节,在linux里是3个字节。
       5. 相同的字符串字面值在代码当中只存一份。

字符数组:

  1. 只要有' \0 '结尾 ,字符数组可以当做字符串使用
  2. 如果没有‘ \0 ' ,把字符数组当做字符串使用,可能出现乱码,可能出现段错误
  3. 可以使用字符串字面值给字符数组初始化,不需要设置数组的长度,编译器会自动计算,并且会给'\0'自动预留数据
  4. 字符数被初始化完成后,程序中就有了两份相同的字符串,一份在代码段(只能读不能写),另一份在栈内存(可读可写)。

字符串的输入:

  1. scanf

​ 占们符%s,char*地址,scanf函数会自动在末 尾存储一个’ \0 ‘.

​ scanf遇到空格就停止,无法接受带空格的字符 串。

​ scanf不负责所输入字符的长度,直到遇见enter键才会停止,当超出存储空间的范围时,可能产生段错误

注意:可以在scanf之前输入getch()来删除缓冲区的值

  1. char *gets(char *s);

    专门用来接受字符串的函数,可以接受带空格的字符串

    gets也不能限制所输入的字符串长度,也可能会产生段错误

  2. char *fgets(char *s, int size, FILE *stream);

    该函数可以从指定的文件中读取不超过size-1个字符,当达到size-1个字符时自动停止,他会强行为‘\0’预留位置。

    如果输入的字符不足size-1个会连\n一起接收。

    如果输入的字符超过size-1个,剩余的属于会残留在缓冲区中会影响后续的数据的输入

    ​ 解决办法:

     stdin->_IO_read_ptr = stdin->_IO_read_end;
    

    终端是一个特殊的文件 stdin

    封装上面的fgets函数

    #include<string.h>
    char* get_str(char* str ,size_t size)
    {
        fgets(str,size,stdin);
        size_t len = strlen(str);
        if('\n' == str[len-1])
        {
            str[len-1] = '\0';
        }
        else
        {
            stdin->_IO_read_ptr = stdin->_IO_read_end;
        }
        return str;
    }
    
    字符串的输出:

    ​ printf "%s" 输出字符串

         int puts(const char *s);
    

    ​ 功能:输出字符串,会自动添加一个'\n'
    ​ 返回值:输出的字符个数

    对字符串操作:

    ​ 标准库中的string.h函数几乎都是处理字符串的函数,常用的有:

        size_t strlen(const char *s);     
    

    功能:计算字符串的长度,不包含'\0'

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

    功能:拷贝字符串,相当于普通变量的赋值语句。

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

    功能:把字符串src追加到dest的末尾,相当于普通变量的 +=。

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

    功能:按照字典序,比较两个字符串,谁在前谁小。
    s1 > s2 返回 正值
    s1 < s2 返回 负值
    s1 == s2 返回 0
    注意:以上四个函数要求能够手写。

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

    char *strncat(char *dest, const char *src, size_t n);
    功能:从src拷贝n个字符追加到dest字符串的末尾

    int strncmp(const char *s1, const char *s2, size_t n);
    功能:按照字典序比较字符s1和s2,只比较前n个字符

    char *strchr( const char *str, int ch );
    功能:在str中查找字符ch首次出现位置,如果找不到返回NULL

    char *strstr( const char *str1, const char *str2 );
    功能:在str1中查找字符串str2首次出现的位置,如果找不到返回NULL

    int atoi(const char *nptr);功能:把字符串转换成int类型整数

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

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

    作业:
    1、实现一个函数把整数转换成字符串
    char* itoa(char* str,int num);
    2、实现一个函数把字符串单词首字母转换成fcha大写,字符串中空格转换成 %_%。

    空格键替换

    判断首单词的大小写

    ​ 3、实现一个函数把字符串中的单词逆序。
    ​ modifying one node will also change the other
    ​ other the change also will node one modifying
    ​ 4、实现两个超大整数的相加。

    附加题:实现一个检查身份证号是否合法的程序。

posted @ 2021-07-10 17:10  de06  阅读(373)  评论(0编辑  收藏  举报