day6 cpp:c中处理字符串,c++string
0.c中处理字符串
c的操作:
//字符串检查函数(非修改式操作)
//返回str的长度,不包括null结束符
size_t strlen(const char *str);
//比较lhs和rhs是否相同,=返回0,>返回正数,<返回负数
int strcmp(const char *lhs,const char *rhs);
int strncmp(const char *lhs,const char *rhs,size_t count);
//在str中查找首次出现ch字符的位置,查找不到,返回空指针
char *strchr(const char *str,int ch);
//在str中查找首次出现子串substr的位置,查找不到,返回空指针
char *strstr(const char *str,const char *substr);
//字符串控制函数(修改式操作)
char *strcpy(char *dest,const char *src);
char *strncpy(char *dest,const char *src,size_t count);//是src的前count个字符
char *strcat(char *dest,const char *src);
char *strncat(char *dest,const char *src,size_t count)
在c中,程序员需要考虑字符数组大小的开辟,结尾空字符的处理,很不方便:
char str[]="hello";
char *pstr="world";
//求取字符串长度
printf("%d\n",strlen(str));
//字符串拼接,不能直接strcat(str,pstr),因为str的内存空间已经固定,没有多余空间存放pstrchar *ptmp=(char *)malloc(strlen(str)+strlen(pstr)+1);
strcpy(ptmp,str);
strcat(ptmp,pstr);
printf("%s\n",ptmp);
//查找子串char *p1=strstr(ptmp,"world");
free(ptmp);
1.c++字符串
把string当成c++的内置数据类型,放在和int,double等内置类型同等位置上
string对象的构造
string str1;//无参构造生成一个空字符串string str2("hello");//通过c风格字符串构造一个string对象,相当于string str2 = "hello";string str3("world", 3);//worstring str4(str3);//拷贝构造函数,相当于string str4 = str3;string str5(str2,1, 3);//ell---从下标1开始,接收3个字符string str6(10, 'a');//生成一个string对象,该对象包含10个a//迭代器方式创建string对象char arr[] = "hello";//迭代器目前可以理解为广义的指针//利用迭代器构造string对象时//需要传入首跌代器和尾迭代器//使用两个迭代器之间(左闭右开)范围的元素作为string对象的内容string str7(arr, arr + 5);//hell [0,5)
//迭代器不等同于指针//begin函数返回string对象的首迭代器//把string视为是存放char型元素的容器//容器类型名称::iterator 就是这种容器的迭代器类型string::iterator it = str1.begin();//auto可以自动推导类型auto it2 = str1.end();string str2(it, it2);//hellostring str3(it, --it2);//hell