标签:
一、字符串基础
注意:字符串一定以\0结尾。
printf("yang\n");
其中yang为字符串常量,"yang"=‘y‘ + ‘a‘ + ‘n‘ + ‘g‘ + ‘\0‘。字符串由很多的字符组成,通常使用字符数组来存储字符串,如char name[10]="yang";也可以以printf(name);的形式输出,即通过数组来访问字符串,但会有警告。因为默认情况下,printf函数只接受字符串常量作为参数(对变量并未写明)。
字符串的三种写法:
这三种写法在内存中的表现都是一样的。
char name[] = {‘y‘ + ‘a‘ };前面不写个数,不是一个字符串,只能说是一个普通的字符数组。
char name[] = "yang";
name[1] = ‘o‘; 把字符串的第二个元素值由a改成o。
二、字符串使用注意点
(1)分析代码,了解\0的作用。
char name[]="yang";
char name2[]={‘o‘ + ‘k‘};
printf("name2 = %s", name2);
%s:根据右边的参数,打印字符串(遇到\0为止)
上面代码的打印结果为:okyang
下面是内存情况分析:
问1:char name[]="y\0ng";则打印结果为什么?(oky)
问2:此时打印name的值,使用%s是多少?y\0ng还是y?
(2)strlen函数
strlen函数计算字符串的长度(字符数)但不包括\0,是字符数不是字数。比如一个汉字占三个字符。
strlen("haha"); // 长度为4
strlen("哈haha"); // 长度为7而不是5
设
char name[] = "git\0hub";
strlen(name);值为3,因为strlen从字符串的地址开始计算,直到遇到\0为止。
假设
char name[] = "github";
char name2[] = {‘o‘ + ‘k‘};
int size = strlen(name);
此时size的值为9。
(3)练习,编写一个函数char_contains(char str[],char c),如果字符串中包含字符c,则返回1,否则返回0。
int char_contains(char str[], char c)
{
//遍历整个字符串
for(int i=0,i<strlen(str);i++)
{
if (str[i] == c)
return 1;
}
return 0;
}
// 调用语句
unt result = char_contains("yang", ‘a‘);
// 使用while循环
①. while(i < strlen(str))
②. while( str[i] !=‘\0‘)
③. while(str[i])
④. int i = -1; while(str[i++])
三、字符串数组
二维字符数组,存储两个字符串数组,每个的长度为1,下面是两种写法但存储情况是一样的。
char name[2][10] = {"jack", "rose"};
char name2[2][10] = {
{‘j‘ + ‘a‘ + ‘c‘ + ‘k‘ + ‘\0‘},
{‘r‘ + ‘o‘ + ‘s‘ + ‘e‘ + ‘\0‘}
}
把rose输出:printf("%s", name2[1]);
输出k:printf("%c", name2[0][3]);
标签:
原文地址:http://www.cnblogs.com/zengshuilin/p/5731173.html