string类型

来源:互联网 发布:周笔畅淘宝店服装 编辑:程序博客网 时间:2024/06/05 06:09
头文件:#include <string>
string s    :   创建了字符串对象 s,s 是一个空字符串,其长度为0:

给string对象赋值:
1. string s;        s="hello,C++STL.";
2.string s; 
char ss[5000];
//scanf 的输入速度比cin 快得多
//scanf 是C 语言的函数,不支持string 对象
scanf("%s",&ss);
//把整个字符数组赋值给string 对象
s=ss;
//输出字符对象
cout<<s<<endl;

添加字符:
在 string 对象的尾部添加一个字符(char),采用“+”操作符即可,
另,也可利用函数append,例如: s.append("abc");

插入:
可以使用 insert()方法把一个字符插入到迭代器位置之前
s="123456";
//定义迭代器
string::iterator it;
//迭代器位置为字符串首
it=s.begin();
//把字符'p'插入到第1 个字符前(注意,字符位置是从0 开始计数)
s.insert(it+1,'p');
输出:1p23456

删除对象元素:
(1)清空一个字符串,则直接给它赋空字符串即可。
(2)使用erase()方法删除迭代器所指的那个元素或一个区间中的所有元素。
代码如下:
s="abc123456";
//定义迭代器变量,指向字符串对象首元素
string::iterator it=s.begin();
//删除第3 个元素,元素位置从0 开始计数
s.erase(it+3);
cout<<s<<endl;
//删除0~4 区间的所有元素
s.erase(it,it+4);
cout<<s<<endl;
//清空字符串
s="";
//输出字符串的长度
cout<<s.length()<<endl;
运行结果:
abc23456
3456
0

采用 length()方法可返回字符串的长度;采用empty()方法,可返回字符串是否为空,
如果字符串为空,则返回逻辑真,即1,否则,返回逻辑假,即0

替换string 对象的字符:
s="abc123456";
//从第3 个开始,将连续的3 个字符替换为“good”
//即将“abc”替换为“good”
s.replace(3,3,"good");
运行结果:
abcgood456

搜索元素或者字串:
采用 find()方法可查找字符串中的第一个字符元素(char,用单引号界定)或者子串(用
双引号界定),如果查到,则返回下标值(从0 开始计数),如果查不到,则返回4294967295。
s="cat dog cat";
//查找第一个字符‘c’,返回下标值
cout<<s.find('c')<<endl;
//查找第一个子串“c”,返回下标值
cout<<s.find("c")<<endl;
//查找第一个子串“cat”,返回下标值
cout<<s.find("cat")<<endl;
//查找第一个子串“dog”,返回下标值
cout<<s.find("dog")<<endl;
//查找第一个子串“dogc”,查不到则返回4294967295
cout<<s.find("dogc")<<endl;
运行结果:
0
0
0
4
4294967295

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
 int ncase, i, j, maxlen;
 scanf("%d", &ncase);
 while(ncase--)
 {
  string str, tmp, res; //str原始数据,tmp倒置str,res相同子串
  cin>>str;
  tmp = str;
  reverse(tmp.begin(), tmp.end()); //倒置
  maxlen = 0;
  for(i = 0; i < str.size(); ++i)
  {
   for(j = 1; j <= str.size() - i; ++j) //j代表截取的长度
   {
    if(tmp.find(str.substr(i, j)) != string::npos) //如果截取匹配
    {
     if(j > maxlen)
     {
      maxlen = j; //长度更新
      res = str.substr(i, j); //最长子串
     }
    }
   }
  }
  cout<<res<<endl;
 }
 return 0;
}

比较:
string 对象可与使用compare()方法与其他字符串相比较。如果它比对方大,则返回1;
如果它比对方小,则返回-1;如果它与对方相同(相等),则返回0。代码如下:
s="cat dog cat";
//s 比“cat”字符串大,返回1
cout<<s.compare("cat")<<endl;

用reverse 反向排序string 对象:
采用 reverse()方法可将string 对象迭代器所指向的一段区间中的元素(字符)反向排 序。reverse()方法需要声明头文件“#include <algorithm>”。
reverse(s.begin(),s.end());

string 对象可以作为vector 向量的元素,这种用法,类似于字符串数组
vector<string> v;
v.push_back("Jack");
v.push_back("Mike");
v.push_back("Tom");
cout<<v[0]<<endl;
cout<<v[1]<<endl;
cout<<v[2]<<endl;
cout<<v[0][0]<<endl;
cout<<v[1][0]<<endl;
cout<<v[2].length()<<endl;
运行结果:
Jack
Mike
Tom
J
M
3
string 对象与sscanf 函数:
在 C 语言中,sscanf 函数很管用,它可以把一个字符串按你需要的方式分离出子串, 甚至是数字。下面这个程序演示了sscanf 函数的具体用法: 
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
string s1,s2,s3;
char sa[100],sb[100],sc[100];
//将字符串分离成子串,分隔符为空格
sscanf("abc 123 pc","%s %s %s",sa,sb,sc);
s1=sa;
s2=sb;
s3=sc;
cout<<s1<<" "<<s2<<" "<<s3<<endl;
//将字符串分离成数字,分隔符为空格
//当用到数字的时候,跟scanf 一样,它要传指针地址
int a,b,c;
sscanf("1 2 3","%d %d %d",&a,&b,&c);
cout<<a<<" "<<b<<" "<<c<<endl;
//将字符串分离成数字,分隔符为“,”和“$”
//当用到数字的时候,跟scanf 一样,它要传指针地址
int x,y,z;
sscanf("4,5$6","%d,%d$%d",&x,&y,&z);
cout<<x<<" "<<y<<" "<<z<<endl;
return 0;
}

string 对象与数值相互转换:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
//C++方法:将数值转换为string
string convertToString(double x)
{
ostringstream o;
if (o << x)
return o.str();
return "conversion error";//if error
}
//C++方法:将string 转换为数值
double convertFromString(const string &s)
{
istringstream i(s);
double x;
if (i >> x)
return x;
return 0.0;//if error
}
int main(int argc, char* argv[])
{
//将数值转换为string 的第一种方法:C 方法
char b[10];
string a;
sprintf(b,"%d",1975);
a=b;
cout<<a<<endl;
//将数值转换为string 的第二种方法:C++方法
string cc=convertToString(1976);
cout<<cc<<endl;
//将string 转换为数值的方法:C++方法
string dd="2006";
int p=convertFromString(dd)+2;
cout<<p<<endl;
return 0;
}
0 0
原创粉丝点击