在C语言中,一般使用字符数组char str[]来存储字符串。 然而,使用字符数组有时会很麻烦,并且由于缺乏经验而容易出错。
为了让程序员更方便地操作字符串,C++在STL中添加了类型,封装了字符串常用的功能,使操作更加方便,不易出错。
如果要使用,需要添加头文件,即#(注意.h和.h是不同的头文件)。
另外,还需要在头文件下面添加一句:using std; 以便可以在代码中使用它。
让我们看看一些常见用途。
1. 定义
定义方法与基本数据类型相同,只需后面跟变量名即可:
string str;
如果要初始化,可以直接给类型变量赋值:
string str = "abcd";
2. 访问内容
(1) 通过下标访问
一般来说,可以像字符数组一样直接访问:
#include
#include
using namespace std;
int main()
{
string str = "abcd";
for(int i=0;1 < str.length();i++)
{
printf("%c",str[i]); //输出abcd
}
}
输出结果:
abcd
如果要读取并输出整个字符串,只能使用cin和cout:
#include //cin和 cout在iostream头文件中,而不是stdio.h
#include
using namespace std;
int main()
{
string str;
cin>>str;
cout<<str;
return 0;
}
上面的代码对于任何字符串输入都会输出相同的字符串。
那么,真的没有办法输出吗?
其实是有的,就是用c_str()将类型转换成字符数组进行输出。 示例如下:
#include
#include
using namespace std;
int main()
{
string str = "abcd";
printf("%s\n",str.c_str()); //将 string 型 str 使用 c_str() 变为字符数组
return 0;
}
输出结果:
abcd
(2)通过迭代器访问
一般只有(1)可以满足访问要求,但有些函数如()、erase()需要迭代器作为参数,所以还是需要学习如何使用迭代器。
由于它不像其他STL容器那样需要参数,因此可以直接定义如下:
string::iterator it;
这样就得到了迭代器it,并且可以通过*it来访问其中的每一位:
#include
#include
using namespace std;
int main()
{
string str "abcd";
for(string::iterator it = str.begin();it != str.end();it++)
{
printf("%c",*it);
}
return 0;
}
输出结果:
abcd
最后指出,和 一样,它支持直接对迭代器加减一个数字,比如 str.begin() + 3 是可行的。