字符串简介
* 在Java中,一个字符串可以用String类型来存储
String s = "MJ";
C语言中没有String这种类型。其实字符串就是字符序列,由多个字符组成,所以在C语言中,我们可以用字符数组来存储字符串。
* 字符串可以看做是一个特殊的字符数组,为了跟普通的字符数组区分开来,应该在字符串的尾部添加了一个结束标志‘\0‘。
‘\0‘是一个ASCII码值为0的字符,是一个空操作符,表示什么也不干。所以采用字符数组存放字符串,赋值时应包含结束标志‘\0‘。
* 字符串"mj"的存储情况如下(假设用字符数组char a[]来存储):char a[] = {‘m‘, ‘j‘, ‘\0‘};
注意了,尾部有个‘\0‘,如果没有这个结束标记,说明这个字符数组存储的并不是字符串
字符串的初始化
char a[3] = {‘m‘, ‘j‘, ‘\0‘};
char b[3];
b[0] = ‘m‘;
b[1] = ‘j‘;
b[2] = ‘\0‘;
char c[3] = "mj"; //“”初始化时,系统会自动在字符串尾部加上一个\0结束符
char d[] = "mj";
char e[20] = "mj";
使用‘’初始化时,一定记得加‘\0’,
字符串数组简介
* 一维字符数组中存放一个字符串,比如一个名字char name[20] = "mj"
* 如果要存储多个字符串,比如一个班所有学生的名字,则需要二维字符数组,char names[15][20]可以存放15个学生的姓名(假设姓名不超过20字符)
* 如果要存储两个班的学生姓名,那么可以用三维字符数组char names[2][15][20]
字符串数组的初始化
char names[2][10] = { {‘J‘,‘a‘,‘y‘,‘\0‘},
{‘J‘,‘i‘,‘m‘,‘\0‘} };
char names2[2][10] = { {"Jay"}, {"Jim"}
};
char names3[2][10] = {"Jay","Jim" };
字符输出函数putchar
putchar(65); // A
putchar(‘A‘); // A
int a = 65;
putchar(a); // Aputchar一次只能输出一个字符
字符输入函数getchar
char c;
c = getchar();
* getchar函数可以读入空格、TAB,直到遇到回车为止。scanf则不能读入空格和TAB。
* getchar一次只能读入一个字符。scanf则可以同时接收多个字符。
* getchar还能读入回车换行符,这时候你要敲2次回车键。第1次敲的回车换行符被getchar读入,第2次敲的回车键代表输入结束。
strlen函数 返回字符串长度不包括 \0, 计算时直到 \0为止
int size = strlen(“aab”);
strcpy函数
char s[10];
strcpy(s,"lmj");将右边的"lmj"字符串拷贝到字符数组s中
直到拷贝到\0为止 在s的尾部肯定会保留一个\0
strcat函数
char s[20] = “hello”; // 将右边的字符串拼接到 s的尾部,连接完毕后在s的尾部保留一个\0
strcmp函数
两个字符串从左至右逐个字符比较(按照字符的ASCII码值的大小),直到字符不相同或者遇见‘\0‘为止。如果全部字符都相同,则返回值为0。
如果不相同,则返回两个字符串中第一个不相同的字符ASCII码值的差。即字符串1大于字符串2时函数返回值为正,否则为负。
strcmp(s1, “abd”);
puts函数 输出一个字符串后自动换行,一次只能输出一个字符串到‘\0’结束
char a[]={‘a’,’b’,’\0’}; puts(a); puts(“ab”);
gets函数
系统会自动在尾部加上一个结束标记\0
char a[10];
gets(a); 一次只能读取一个字符串 ,scanf 读取可以多个
gets可以读入包含空格、tab的字符串,直到遇到回车为止;scanf不能用来读取空格、tab
gets与scanf混用时发现:先gets再scanf没事,若先scanf再gets则gets不执行了,因为先gets表示第1个就是属于它的
scanf函数
char a[10];系统会自动在尾部加上一个结束标记\0
scanf("%s", a);因为a代表它的地址,所以不需要写成&a
scanf(“%f”, &a); scanf(“%d, %s,%f”, &a,&b,&c); 接收多个时,分隔符可以是任意符号
包括空格、tab、回车