string类型使用小结

c++在c的char类型基础上引入了string类,从而更加方便地对字符串进行操作。但是如果是不会使用string类也会带来很多麻烦。在自己编码的基础上总结了几点误区。

1、char*类型与string类型的相互转换

从char*到string,需要调用string类的构造函数
  如:char* a; string s(a);
从string到char*,需要使用string类的c_str()函数
  如:string s = “hello”, const char* c = s.c_str();

2、一个特殊错误

单步调试没问题,但是一运行就崩溃

1
2
3
4
5
6
7
8
9
10
11
//编译通过,运行崩溃
string str;
i=0;
freopen("test_without_punctuation.txt", "r", stdin);
char c;
while( scanf("%c", &str[i]) != EOF) {
if(str[i] >= 'a' && str[i] <= 'z')
total_len += MC[str[i]-'a'].length();
// cout << total_len << ' ' << i << endl;
++i;
}
1
2
3
4
5
6
7
8
9
10
11
12
//编译通过,运行正确!
string str;
i=0;
freopen("test_without_punctuation.txt", "r", stdin);
char c;
while( scanf("%c", &c) != EOF) {
str+=c;
if(str[i] >= 'a' && str[i] <= 'z')
total_len += MC[str[i]-'a'].length();
// cout << total_len << ' ' << i << endl;
++i;
}

原因可能在于对string类型进行读入的时候,即使用scanf()时,string不支持对单个字符的读入!