string和char型数组的区别
总的来说,string比char[]更耗时,比如apend()这种函数,而string能完成的操作char[]基本都可以实现。
如果想将string转换成指针,可以使用string类的c_str函数。c_str()返回const char*,指向一个字符数组,数组里存的字符串就是原string的值,而且最后以'\0'结尾。不过由于是const char*,无法修改。
char *str;
这个变量可以进行指针运算,比如:
str++;
str--;
但如果定义成:
char str[];
则str++这样的语句是错误的,这个首地址不得进行赋值计算。
在不改变str指针指向地址的情况下,下面的语句是一样的结果。
printf("%s",str+2);
如果定义时为其赋初始值,如char *str1 = "Hello World!"; char *str2[] = "Hello World!";前者编译器把"Hello World!"放在常量储存区;后者把"Hello World!"放在线程堆栈区,当str2离开作用域所占用内存即收回.
1.赋值
char赋值:
char ch1[] = "give me";char ch2[] = "a cup";strcpy(ch1,ch2);cout<<"ch1="<
输出结果:ch1=a cup
string赋值:
string str1 = "give me";string str2 = "a cup";①str1 = str2;cout<<"str1="<
输出结果:str1=a cup
str1=a cup
2.合并(全部)
char合并(全部):
char ch1[15] = "give me "; // 注意长度,合并后为13char ch2[] = "a cup";strcat(ch1,ch2);cout<<"ch1="<
输出结果:ch1=give me a cup
string合并(全部) 直接相加
string str1 = "give me ";string str2 = "a cup";str1 = str1 + str2;cout<<"str1="<
输出结果:str1=give me a cup
3.合并(部分)
char合并(部分):
char ch1[10] = "ab"; // 注意合并后的长度char ch2[] = "abc";strncat(ch1,ch2,3); // 参数3为从起始位置起的字符数cout<<"ch1="<
输出结果:ch1=ababc
string合并(部分):
string str1 = "ab";string str2 = "cdefg";str1.append(str2,2,3); // 参数2为数组下标,参数3为参数2后字符数。即将str2从下标为2位置起3个字符合并到str1cout<<"str1="<
输出结果:str1=abefg
4.测长
char测长:
char ch1[] = "give me";int m = strlen(ch1); //不包括‘\0’cout<<"m="<
输出结果:m=7
string测长:
string str1 = "give me";①int m = strlen(str1.c_str());cout<<"m="<
输出结果:m=7
n=7
k=7
5.替换
char替换:
char ch1[10] = "ab";char ch2[] = "cdefg";strncpy(ch1,ch2,3); // 拷贝ch2起始位置后3个字符赋给ch1cout<<"ch1="<
输出结果:ch1=cde
string替换:
string str1 = "ab";string str2 = "cdefgh";str1.replace(0,1,str2,4,2); // 将str2从下标4开始2个字符替换掉str1中从起始位置开始1个字符// replace函数可重载,有多种形式,也支持Char型字符替换cout<<"str1="<
输出结果:str1=ghb
6.拷贝
char拷贝:
char ch1[10] = "abc";char ch2[] = "de";memmove(ch1,ch2,2); //将ch2从起始位置起两个字符赋给ch1cout<<"ch1="<
输出结果:ch1=dec
string拷贝:
string str1 = "abc";char ch2[10] = "defg";str1.copy(ch2,10,1); // copy函数的第一个参数只能为char类型// 将str1从下标1位置开始的10个字符赋给ch2cout<<"ch2="<
输出结果:ch2=bcfg
7.插入
string str1 = "1278";string str2 = "3456";str1.insert(2,str2,0,4); // 在str1下标为2的位置插入str2起始位置后4个字符cout<<"str1="<
输出结果:str1=12345678
8.删除
string str("give me");str.erase(2,2); // 删除从下标为2位置起两个字符cout<<"str="<
输出结果:str=gi me
str=gi
str=
9.查找
string str("Hello worldw");int m = str.find('w',0); // 从str起始位置开始查找w字符cout<<"m="<
输出结果:m=6
n=0
k=6
l=11
p=10
q=11
10.比较
string str1 = "155";string str2 = "52";char c[] = "34";char c2[]= "56";int z = strncat(c,c1);//用来比较两个char数组是否相等int i = str1.compare(str2);cout<<"i="<
11.判空
string str = "";if(str.empty())
12.转换(string转字符数组)
string str1 = "Hello World";const char* ch1;ch1 = str1.c_str();
13.交换
char交换:
char ch1[15] = "ofru";char ch2[15] = "";swab(ch1,ch2,strlen(ch1)); // 将ch1奇偶对调后传入ch2cout<<"ch2="<
输出结果:ch2=four
string交换:
string str1 = "four";string str2 = "";str1.swap(str2);cout<<"str2="<
输出结果:str2=four
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
