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算法的人体病毒检测

详情代码在这里

 
posted @ 2020-06-06 17:57  Gx_y  阅读(216)  评论(0编辑  收藏  举报