字符串(附格式说明符&数据类型)

————————————————————格式说明符(不知道全不全的大全)————————————————————

https://blog.csdn.net/overstep1024/article/details/44703083

————————————————————————数据类型————————————————————————————

 https://blog.csdn.net/wfreehorse/article/details/60589326

—————————————————————————字符串————————————————————————————

字符串是什么?

字符(要注意字符串和字符数组的区别)就是由字符组成的连续的有序排列(其实非常简单)为了区分字符用单引号圈起来所以 字符串用双引号圈起来。且字符串以0来标志字符串的结束     ex:"a"=='a'+'0'

在c中字符串以数组的形式存在,不同的是不能用运算符对字符串做运算

编译器会在字符串结尾补一个0,这个0呢并不会计算在字符串的长度里,但在字符数组中0会被当成一个数组单元计算在字符数组的长度里

字符串(附格式说明符&数据类型)_第1张图片

字符串(附格式说明符&数据类型)_第2张图片

字符串(附格式说明符&数据类型)_第3张图片

系统会直接分配一部分的内存来存放这个字符串,而指针会指向他。所以用指针的形式创立的数组是only-read不能修改。

用数组的方式创立字符串则可以直接修改(当然因为数组无法被赋值,需要用到遍历)

———————————————————————空字符串—————————————————————————————

连续的双引号代表空字符串        char[  ]="",不管括号里啥,只有char[0]="0"这是作为字符串结尾的0,这个数组长度只有1


字符串(附格式说明符&数据类型)_第4张图片

二维数组(?)的第二位必须要有具体的值,并不确定这样写法的名字,就上个图清新易懂。

—————————————————————putchar函数与getchar函数————————————————————————

putchar函数原型:

int putchar(int c) →向标准输入写入一个字符

getchar函数原型:

int getchar(void)→向标准输入读入一个字符

—————————————————————c语言的字符串函数库—————————————————————————

调用这些函数需要加上头文件 #include

strlen函数原型 strlen(const char*)返回字符串的长度 不包括字符串结尾0(与sizeof不同,sizeof会把0也算进返回的长度里)

strcmp函数原型 strcmp(const char*s1,const char*s2)对2个数组进行比较然后return, 0, 1 ,-1

0:s1==s2           如果输出了这3个数以外的值N,那么N表示S1和S2相差多远(用ASCN2码表计算)

1:s1>s2              永远是S1比较S2,不可能是S2比较S1

-1:s1

strcpy函数原型 strcpy(char*restrict dst(目的地),const char*restrict src(源头)) cpy是copy的意思,顾名思义将src的字符串拷贝到dst的位置上

restrict:说明dst和src不重叠(如果重叠则不要使用strcpy很危险)  return的是dst

小套路→复制一个字符串

字符串(附格式说明符&数据类型)_第5张图片

strcat函数原型 strcat(char*restrict dct,const char*restrict src)

将src字符串连接到dct字符串的后面形成一个新的长字符串

但是strcat和strcpy都具有危险(尤其是strcat,如果接入的空间不够呢)因此我们需要做一些安全保证。

字符串(附格式说明符&数据类型)_第6张图片

strchr函数原型 char*strchr(const char*s,int c)

从左至右寻找s字符串的首地址 return NULL→没找到 ,非NULL→找到

 

strrchr(多一个r)函数原型 char*strchr(const char*s,int c)

从右至左寻找s字符串的首地址 return NULL→没找到 ,非NULL→找到

返回的都是指针


字符串(附格式说明符&数据类型)_第7张图片

字符 ASCII  以数值存储  0-255
字符的表示:要加单引号
a  变量   1数值
'a' 字符  '1'字符
不可见字符的表示
'\n'  回车
'\0'  结束符
' '    空格
'a'   =   97         'A'  = 65       'a' - 'A' =32         '0'= 48
小写字符-大写字符=32
'0'字符转成数值0的方式
'0' -'0'  =0              
数字字符变量x转成对应数值y
char x;
int y;
y=x-'0';
如何判断某个字符变量x是字母字符
if( (x>='a' && x<='z' ) || (x>='A' && x<='Z' ) )
如何判断某个字符变量x不是字母字符
if( !( (x>='a' && x<='z' ) || (x>='A' && x<='Z' ) ) )
如何判断某个字符变量x是数字字符
if (x>='0' && x<='9' )
判断空格
if(x==' ')
字符与数值之间可以转换输出
例1:
char x='a';
printf("%d",x);          //会输出97
例2:
char x=97;
printf("%c",x);        //会输出a
例3:
int x=97;
printf("%c",x);        //会输出a
整数数据(在前)与字符(在后)同时输入的方式:
char x;int y;
scanf("%d %c",&y,&x);
PS:cin,scanf不能输入空格、换行两种字符  
         gets可以接收空格,不能输入换行字符
        getchar() 才可以接收任意字符
字符串的输入char s[100];
(1) scanf("%s",s);       //字符串的数组名为字符串的首地址,所以不要地址符
(2) gets(s);
(3)逐个输入以换行结束
    char s[100],c;
     int i=0;
   for( ;  ; )
   {
    c=getchar();     //或者      scanf("%c",&s[i]);       //单个变量,输入的时候要加地址符
    if(c=='\n') {s[i]='\0';  break;}
  }
(4)例:输入多行字符给字符数组s  ,以@结束
     char s[100],c;
     int i=0;
    while( (c=getchar())!='@' )
   {
    s[i]=c;
    i++;
   }
 printf("%s",s);
字符串的输出方式多种多样
(1)printf("%s",s);                   //没有输出换行
(2) for(i=0;s[i]!='\0';i++)
       putchar(s[i]);      //printf("%c",s[i]);
(3)len=strlen(s);  //求出字符串长度len
    for(i=0;i<=len-1;i++)
      putchar(s[i]);
(4)puts(s);                           //有输出换行

 

你可能感兴趣的:(C,神秘链接)