前言

字符、串和字符串区别及使用


一、区别及定义

字符:
在计算机中是以整型形式存储的,当需要显示时会根据ASCII表中的对应关系显示出相应的符号或图案
字符的输入:
scanf("%c",&ch);
ch=getchar
字符的输出:
printf("%c",ch);
putchar(ch);
串:
是一种数据结构,是由一组类型相同的若干个数据组成-末尾又结束标  志
对于这种数据结构的处理都是批量性的,从开头位置一直处理到结束标志为止

字符串:
由字符组成的串型结构,结束标志是'\0'
字符串的输入:
scanf("%s",地址);
缺点:不能输入空格
char *gets(char *s);
功能:输入字符串,并且可以接受空格
返回值:链式调用(把一个函数的执行结果,通过返回值作为另一个函数的参数)
char *fgets(char *s, int size, FILE *stream);
功能:可以设置输入的字符串的长度为size-1;超出部分不会接受,它会为'\0'预留位置
s:内存块
size:字节数
stream:stdin
注意:如果输入的字符不足size-1,最后的\n会被一起接收了
字符串的输出:
printf("%s",地址)   

int puts(const char *s);\0
功能:输出一个字符串,会在末尾自动添加一个换行\n
返回值:成功输出的字符个数

二、字符串的存在形式:

字符数组:
   char str[10]={'A','B','C'...}
   由char类型组成的数组,要为'\0'预留位置,初始化麻烦
   使用的是栈内存,数据可以随意修改

字符串字面值:
   "由双引号包含的若干个字符"
   在末尾隐藏一个'\0'
   字符串字面值是以地址形式存在的,数据存储在代码段中,如果修改就会产生段错误
   两个一模一样的字符串字面值在代码段只有一份

常用方式:
   字符数组[]="字符串字面值";
   会自动给'\0'预留位置
   赋值完成后字符串会存在两份,一份在代码段,另一份在stack(可以修改)

三、字符串相关的常用操作:

#include <string.h>
   size_t strlen(const char *s);
   计算字符串长度,不包括'\0'
   注意:sizeof() 和 strlen 的区别

   char *strcpy(char *dest, const char *src);
   功能:把src的内容拷贝到dest,相当于给dest赋值,必须借助函数
   返回值:链式调用 
   char *strncpy(char *dest, const char *src, size_t n);
   功能:把src前n个字符拷贝给dest

   char *strcat(char *dest, const char *src);
   功能:把src追加到dest后面,相当于+=对于字符串
   返回值:链式调用 
   char *strncat(char *dest, const char *src, size_t n);
   功能:把src前n个字符追加到dest后面

   int strcmp(const char *s1, const char *s2);
   功能:比较两个字符串的大小,按照字典序比较,谁在前面谁小,只要比较出结果,立即返回,后面的不再比较
   返回值:
        s1>s2 正数
        s1<s2 负数
        s1==s2 0
   int strncmp(const char *s1, const char *s2, size_t n);
   功能:比较前n个字符两个字符串的大小

   #include <stdlib.h>
   int atoi(const char *nptr);
   字符串转成int类型
   long atol(const char *nptr);
   字符串转成long类型
   long long atoll(const char *nptr);
   字符串转longlong类型
   double atof(const char *nptr)
   功能:字符串转double类型
   
   #include <string.h>
   char *strstr(const char *haystack, const char *needle);
   功能:查找haystack,是否存在needle 
   返回值:needle首次在haystack中出现的位置,如果找不到返回NULL
   char *strchr(const char *s, int c);
   功能:查找s中是否有字符c
   返回值:c在s中首次出现的位置,不存在返回NULL

   int sprintf(char *str, const char *format, ...);
   相当于字符串的拼接
   功能:把各种类型数据输出到str中
   返回值:拼接后str的长度
   int sscanf(const char *str, const char *format, ...);
   功能:从str读取解析各种类型的数据
   返回值:成功读取到的变量的个数

总结

对字符、串和字符串的理解及学习,有错误,还请指正