0:48 A:65 a:97
char x=’1’,y=’3’; //int:x=49,y=51
printf(“%c,”,y++); //y++先输出后++,因此输出3,y=52
printf(“%d\n”,y-x); //y=52,x=49,y-x=3
putchar()的作用是输出字符或者字符变量的值 ,getchar()是只能接收一个字符。
C语言本身没有提供对字符串进行整体操作的运算符
输出:
printf(“格式控制字符串”, 输出列表); 如:printf(“%s”, string);
putchar(字符数据); 如:char a_c=‘h’;putchar(a_c);
puts(字符串); 如:puts(“hello girl”);
字符常量:
字符常量只能用英文单引号括起来,不能用双引号

字符串数组:

×char str[80]; str=”abcdefg”; //str是数组名,是指针常量,不能更改
√char str[10]=”China”; //定义字符串数组并初始化
√char str; str=”China”; //char是字符指针 指向这个字符的地址? //不行啊????
×char str1[10] = “computer”, str2[10]; str2 = str1; 错误,字符数组赋值,用采用strcpy()函数,strcpy(str2,str1);

字符串变量:

string str; str=”China”; //定义字符串变量并赋值

指针:

char p(): 是指针函数,p是函数;
char
p(char a[10]);这是声明了一个返回为char (字符指针)的函数
char (
p) ():是函数指针,p是指针。
正确的定义:
char s[5]={“abc”};
char s[5]={‘a’,’b’,’c’};//每个位置存储的是字符,同上
char s[5]=” “;
char s[6]={ “ABCD”, “EFGH”, “IJKL”, “MNOP”, “QRST”, “UVWX” }; //每个位置存储的是字符串的指针
将字符串赋值给字符数组:
1.定义时直接用字符串赋值。 char a[10]=”hello”;但是不能先定义再赋值,即以下非法:char a[10];a[10]=”hello”;
2.利用strcpy。 char a[10]; strcpy(a,”hello”);
3.利用指针。 char
p; p=”hello”;这里字符串返回首字母地址赋值给指针p。另外以下非法:char a[10]; a=”hello”; a已经指向在堆栈中分配的10个字符空间,不能再指向数据区中的”hello”常量。可以理解为a是一个地址常量,不可变,p是一个地址变量。
4.数组中的字符逐个赋值。

定义相等?
String s = “hello”;
String t = “hello”;
char c[] = {‘h’, ‘e’, ‘l’, ‘l’, ‘o’} ;
正确:s.euals(t); s==t;t.equals(new String(“hello”));
flase:t.equals(c)
char[] s = “abc”;
//长度3,大小4
单引号只存放一个字节 而双引号可以存放多个
string_a是一个char型的指针,在64位系统中sizeof(char*)=8
string_b是一个char型的数组,在64位系统中sizeof(char)=1,共100值因此为100

子串

设字符串的长度为n;子串个数为s
则s=n(n+1)/2+1;

比较

字符串 - 图1

大小长度

对字符串进行sizeof操作的时候,会把字符串的结束符”\0”计算进去的,
进行strlen操作求字符串的长度的时候,不计算\0,以\0为字符串结束标记
“a+b=20\n”的长度是7
字符串常量”Hello”会被隐含处理成一个无名字符型数组,它有6个元素
字符串 - 图2
char c=’a’; sizeof(c)=1;
char a[]=”ABCDEF”;char b[]={‘A’,’B’,’C’,’D’,’E’,’F’};
a的长度会加上’\0’,是字符串,b是字符数组,不会加’\0’
strlen(a)是6,strlen(b)不确定?

若有收获,就点个赞吧