string类的坑(string 类的应用和加倍后出现的问题)
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 string t; 7 cin>>t; 8 int len = t.length(),i; 9 10 for(i = 0;i<len;i++) 11 { 12 t[len+i] = t[i]; 13 } 14 t[len*2] = '\0'; 15 cout<<t; 16 return 0; 17 }
一‘执行以上代码后t仍然没被加倍,这是因为‘\0’是字符数组的结束标志符,不是string的!!
‘\0’在字符串内也可以算作一个元素
1 string s = "123456"; 2 s[3]='\0'; 3 cout << s << endl; //A行 4 string str = "12\0456"; 5 cout << str << endl; //B行
A行你以为输出 123,实际输出 123 56 ,因为\0 就是个空字符!
B行输出 12%6,因为人家把\045 看作八进制数 45,相应十进制就是 37,对应字符就是%
二.另外string s;此时的s是一个空字符串,没有长度
三.string 与 char[](或者 char*)的相互赋值问题
1、char[] 赋值给 string 对象,直接赋值
2、char* 赋值给 string 对象,直接赋值
3、string 对象赋值给 char[]或 char*,有三种方式。
四.对于char对应的函数,若用string使他们(如strcpy,strcat等等)
函数形参为char[]时在主函数的实参(若为string)则应写为&s[0]
因为char[]是字符串第一个元素的首地址,要用取地址的符号&s[0]
五.string1类中类似于python的切片原理的函数str.copy(ch,length,first_element)
1 char a[20] = {0}; //将 a 数组的全部元素初始化为‘\0' 2 string s = "123456"; 3 s.copy(a, 3, 1); //len=3, pos=1 4 cout << a << endl; // 输出:234
可应用于KMP算法的人体病毒检测