------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
字符串
1 字符串的概念
字符串是位于双引号的字符序列,在内存中以'\0'结束所占字节比实际多一个。
1>c语言中没有字符串变量,可以用字符数组来存放字符串
2>可以吧一个字符常量赋值给一个字符变量,单不能把字符串赋值给字符变量
2 字符数组的定义
形式与数组数组相同
1>一维字符串数组
char 数组名[常量表达式]
char a[5]
char a[5+3]
int len ;
char a[len]
也可以使用宏定义 # define M 2
char a[M];
2> 二维字符串数组
char a[2][3];
3 字符数组的初始化
1>定义数组的同时进行初始化
char a[5]={'a','b','c','e','f'};
char a[] = {'a','b','c','e','f'};
char a[3]={'a'};// a\0\0
char a[5]={[3]='b'};
2>先定义后初始化
char ch[3];
ch[0]=‘d’;
ch[1]='c';
4>字符数组的遍历
char [n];
for (int i =0;i<n;i++){
printf("%c\t",ch[i]);
}
4字符数组涌来保存字符串的
字符数组作用
1)保存字符串 char str[10]={"halloworld"};
2)保存字符
字数组保存字符串,
第一种初始化方法
char str[4]={"abc"};
str[0]='a';str[1]='b';str[2]='c';str[c]='\0'
第二种初始化方法
char str2[4]="abc"; 这里直接包含\0 所以数组的长度是4
字符串的输出与输入
把一个字符数组,用%s输出
char ch[10]={'a','b','c','d','\0'}
用%s接收一个字符串
char str[];
5 以%s的形式输入和输出字符串
使用%s表示的输入/输出的是一个字符串。
%c 我门要查看的是一个字符串,每次打印的事一个字符。
char str[10]="hahais"
for(int i=0;i<10;i++){
printf("%c",str[i]);
}
用%s从给定地址开始,输出字符直到遇到\0结束 这样可以用prinf和scanf一次输入一个字符串。
把一个数组用%s输出
char str[3]={'a','b','\0'};
printf("%s",str);
从键盘上输入一个字符串
char str1[10];
scanf("%s",str1);
注意点:
1》用%s格式进行输出的话,注意空格问题
如果输入的字符串友空格,课空格无法被接受收保存
以%s的格式输入,scanf遇到了空格,就结束了
2》输入的字符串的长度要小于数组的长度
6字符串结束的使用
char a[]={'a','b','c','d','\0'};
char b[]={'x','y'};
printf(%s,b);//这里 答应出来的事xyabcd,就是应为没有加\0
在初始化对方法下后面要手动加‘\0’否则会出现乱码或者不是我们想要的
7.字符串长度的计算
1》使用字符串函数 strlen(str);
2》以'\0'作为条件,进行判断遇,遇到\0就结束
不知道数组的长度下计算字符串长度
//不指定字符串长度的初始化(要循环的次数),所以可以使用while
char ch[]="acd";
int i=1;
while(ch[i-1]='\0'){
i++;
}
printf("长度:%d\n",i);
判断字符串中是否包含某个字符 如果包含 返回首次出现的位置。否则
返回-1.
8 字符数组
字符数组实际上和普通数组没有什么区别
数组类型的含义:数据类型的事数组所包含的元素都是类型,而不是数组名的类型数组名永远是一个指针,指向第一个元素到之地,即数组地址
9.字符串处理函数
1》字符串输出函数puts 头文件stdio.h
1.puts函数可以自动换行
2.也可以不是数组的首地址,可以是元素地址
3.必须是字符数组
4不可以格式化输出
puts(str);
2》字符串输入函数gets 头文件stdio.h
使用gets会给出一个警告
1)warning :this program uses gets() ,which is unsafe.
2)不安全:数组长度是100,但如果你输入了120个字符,会存在越界问题
3)使用gets可以接受空格
3》字符串链接函数strcat(); 使用时的头文件string.h
链接一个字符串,把两个字符串链接成一个字符串
oldstr ,newstr,两个字符串
1)strcat(oldstr,newstr); nwestr把oldstr的最后一个字符\0覆盖了拼接到oldstr。后面
2)oldstr的长度有足够,能确保保存old+newstr
4》字符串拷贝函数:strcpy 引入头文件string.h
strcpy(oldstr,newstr);
把newstr拷贝到oldstr中,newstr会覆盖掉oldstr
5》strcmp 比较两个字符串大小
abc
def 大 规则:比较字符的aascii码值,比较字啊字典中出现的顺序
比较过程,逐个取两个字符串的字符对应位相比较,从第一位不同的开始,就能确定字符串大小
strcmp(str1,str2) 函数有返回值 >0 str1>str2
<0 str1 < str2
==0 str1 = str2
练习计算单词个数 ,同时让首字母大写
#include <stdio.h>
int main(int argc, const char * argv[]) {
char ch[100];//定义一个变量存储字符串
printf("请输入一个字符串\n");
gets(ch);
int word=0;
int count=0;
//循环取出每个字节,遇到\0循环结束
for(int i=0;ch[i]!='\0';i++){
if (ch[i] == ' ') {
//是否是单词标记下
word = 0;
}else if(word == 0){
//当前循环 字符是空格 下一次循环一定是单词
count++;
word =1;// 让单词标志变为不是单词
ch[i]=ch[1]-32;
}
}
printf("%s\n",ch);
printf("单词的个数是%d",count);
return 0;
}