北京大学C语言学习第三天

字符串1
所占字节数为 字符数加1 ,结尾有个\0,字符串长度不包括 \0。
字符串3种形式:
1.双引号括起来的
2.存放于数组中的,以/0结尾
3.string对象

字符串常量: 空串(占据一个字节空间,存放\0)
包含“\0” 字符的一维数组,就是一个字符串,存放的字符串由 “\0” 前的字符组成。
char 数组存放字符串,数组元素个数至少为 字符串长度+1
char 数组的内容,初始化时可以设定。
printf读入字符数组时,会在字符串的末尾自动加上 “\0”.
程序实例:

#include<iostream>
#include<cstring>
using namespace std;
int main(){
char title[]="Prison Break";
char hero[]="Michel Socfield";
char PrisonName[100];
char response[100];
cout<<"What's the name of the prison in "<<title<<endl;
cin>>PrisonName;
if(strcmp(PrisonNmame,"Fox-River")==0)
cout<<"Yeah ! do you love "<<hero<<endl;
else{
strcpy(response,"It seems you haven't watched it! \n");
cput<<response;
}
return 0;
}

a[3]=0; 等价于 a[3]=’\0’;
字符串2
scanf读入字符串
在数组长度不变的情况下,scanf可能导致数组越界
读入一行到字符数组:
1.cin.getline(char buf[],int bufsize);
code:

#include<iostream>
using namespace std;
int main(){
	char line[10];
	cin.getline(line,sizeof(line));//读入最多9个字符到line
	cout<<line;
	return 0;
}

2.gets(char buf[]);读入一行,自动添加“\0”
code:

char s[10];
while(gets(s)){
printf("%s\n",s);
}

读入一行(行长度不超过bufsize-1)或bufsize-1个字符到buf,自动添加“\0”,回车换行符不会写入buf,但是会从输入流中去掉。

字符串3
字符串库函数
#include
字符串函数都是根据\0 来判断字符串结尾
形参为 char[] 类型,则实参可以是char数组或字符串常量

1字符串拷贝:
strcpy(char [] dest,char [] src); //拷贝src到dest
2字符串比较小:
int strcmp(char [] s1,cahr [] s2);//返回0则相等
3求字符串长度:
int strlen(char [] s);
4字符串拼接:
strcat(char [] s1,char [] s2);//s2拼接到s1后面
5字符串转成大写:
strupr(char []);
6 字符串转成小写:
strlwr(char []);

字符串库函数用法示列:
code:

#include<iostream>
#include<cstring>
using namespace std;
void PrintSmall(char s1[],char s2[]){//输出字典序小的字符串
if(strcmp(s1,s2)<=0)
cout<<s1;
else cout<<s2;
}
int main(){
char s1[30];
char s2[40];
char s3[100];
strcpy(s1,"hello");
strcpy(s2,s1);
cout<<"1 "<<s2<<endl;
strcat(s1,"world");
cout<<"2 "<<s1<<endl;
cout<<"3 ";PrintSmall("abc",s2);cout<<endl; 
cout<<"4 ";PrintSmall("abc","aaa");cout<<endl;
cout<<"5 "<<","<<strlen("abc")<<endl;
strupr(s1);
cout<<"6 "<<s1<<endl;
return 0;
}

strlen 常见糟糕用法:
char s[100]=“test”;
for(int i=0;i<strlen(s);i++){//每次调用strlen这是在效率上最大的浪费
s[i]=s[i]+1; //访问s[i]
}
以上把i<strlen 换为 s[i] 是一样的效果。

字符串4
编写判断字串的函数
code:

int Strstr(char s1[],char s2[]){
//寻找s1中是否含有字串s2
if(s2[0]==0) return 0;
for(int i=0;s1[i];i++){//枚举比较起点
int k=0i,j=0;
for(;s2[j];++j;++k){
id(s1[k]!=s2[j])
break;
}
if(s2[j]==0) return i;
}
return -1;
}
发布了191 篇原创文章 · 获赞 66 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42403069/article/details/105541572
今日推荐