一 字符串
1 字符串 是位于双引号中的字符序列 在内存中以“\0”结束,所占字节比四级多一个
2 注意点 可以吧一个字符常量赋值给一个字符变量,但不能把字符串常量赋值给字符变量 C语言中没有字符串变量 可以用字符数组来存放变量
二
字符数组
1 用来存放字符量的数组
2 字符数组定义 char 数组名[变量表达式] 李二 char c[5];
也可以是二维或多维数组 char 数组名[常量表达式][变量表达式]
定义字符数组时,应该确保数组长度比字符串长度至少多1
3 字符数组初始化
可以在定义时初始化
char c[10]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'}; 字符数组和其他的整形数组一样,当我们一旦给数组部分初始化了
剩下没有初始化的部分也都是0 以%s格式进行输入的时候,输入的时候,不能输入空格
如果输入了空格,认为此次输入结束,scanf退出
4 字符数组引用也是通过下标引用
5 访问方式
1)访问单个字符
printf("%c",c[0]);
2)以字符串的形式输出
char c[5]="asbc";
printf("%s",c);
6 存储原理
字符数组在内存中存储的原理
1)计算机分配连续的内存空间
2)字符串的第一个字符存放到地地址中
3)字符数组的每一个字符占用1个字节
char c1[6];
int len = sizeof(c1)/sizeof(char);
= sizeof(c1);
小练习
查询某个字符在字符串中首次出现的位置
int getCharIndex(char c1[],char c){
int i=0;
while (c1[i]!='\0') {
if (c1[i]==c) {
return i;
}
i++;
}
return -1;
}
int main(int argc, const char * argv[])
{
//定义一个数组
char c[]="asfakfasdfasf";
int index = getCharIndex(c,'k');
printf("%d\n",index);
return 0;
}
三
常见的字符串函数
1、puts() 输出的函数,输出内容到输出的缓冲区
printf("Hello, World!\n");
fflush(stdout); //强制刷新缓冲区
puts可以帮我们自动换行
puts("hello world!");
char ch[]="asdfasfasfasf";
puts(ch);
puts的缺点是不能格式化输出
2、gets() 获取用户从键盘上输入的内容
优点:可以从键盘接收含空格的字符串
注意:warning: this program uses gets(), which is unsafe.
gets()是不安全的
char ch3[10];//当输入的内容超出了数组的长度,gets()会在数组中放10个字符,但是没有'\0'
char ch1[10];
获取内容,从键盘上
gets(ch1);
输出内容
puts(ch1);
3、strcat 字符串连接函数
char oldStr[40]="welcome to ";
char newStr[10];
gets(newStr); //接收用户输入的内容
把newStr连接到oldStr最后,newStr会覆盖oldStr的'\0'
strcat(oldStr,newStr); //进行字符串的连接
puts(oldStr);
4、strcpy 字符串的拷贝函数
char oldStr[40]="welcome to ";
char newStr[10];
gets(newStr);
把newStr的内容拷贝到oldStr中,会覆盖oldStr中的内容
strcpy(oldStr,newStr);
puts(oldStr);
5、strcmp 字符串的比较函数
char oldStr[10]="abcde";
char newStr[10];
strcmp(oldStr,newStr) 逐个比较字符的ascii码值
返回值>0 表示oldStr>newStr
返回值<0 表示oldStr<newStr
返回值=0 表示oldStr==newStr
gets(newStr);
if (strcmp(oldStr,newStr)>0) {
puts("你输入的字符串小了");
}else if(strcmp(oldStr,newStr)<0){
puts("你输入的字符串大了");
}else{
puts("相等");
}
|