string类总结

string类总结

一、string对象的定义,初始化及读写

string s1;            //默认构造函数,s1为空串
string s2(s1);        //将s2初始化为s1的副本
string s1('wuyang');  //将s1初始化为一个字符串副本
string s1(n, 'w');     //将s1初始化为一个n个'w'的字符串

cin >> s1;              //读取有效字符,遇到空格结束
getline(cin, s1);       //读取字符直至遇到换行(可以读取空格)
getline(cin, s1, 'w');  //读取字符直至遇到字符'w'(可读取空格和换行)

二、string对象的操作

s1.empty();                    //s1为空返回真,否则返回假
reverse(s1.begin(), s1.end()); //将string对象迭代器指向的一段区间内元素反向排序
s1.size();                     //返回字符个数
s1.length();                   //同上,返回字符个数,一般不怎么用
s1[n];                         //返回位置为n的字符(从0开始计数)
s1.append("abc");              //向字符串尾部添加字符串

s1 + s2;                       //连接s1,s2两个字符串
//可以把一个string对象和一个字符相连,但不能将两个字符相加.
//s1 + 'w' + 'y'这种相加是允许的, 'w' + 'y' + s1是错误的.
s1 = s2;                       //替换
s1 == s2;                      //判断相等,相等返回真,否则返回假
注意 s1.size() 返回的值并不是int类型

size_t 与 size_type:  http://blog.youkuaiyun.com/sunshineacm/article/details/77481464

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

int main()
{
    string str1;

    getline(cin, str1);
    while(!str1.empty())
    {
        for(string::size_type i = 0; i != str1.size(); ++i)  //size_type
        {
            cout << str1[i];
        }
        cout << endl;
        break;
    }

    return 0;
}


三、string对象中字符的处理(头文件#include<cctype>)

isalnum(c);  //如果c是字母或数字,返回真
isdigit(c);  //如果c是数字,返回真
isalpha(c);  //如果c是字母,返回真

islower(c);  //如果c是小写字母,返回真
isupper(c);  //如果c是大写字母,返回真
tolower(c);  //如果c是大写字母,则返回其小写字母,否则返回c
toupper(c);  //如果c是小写字母,则返回其大写字母,否则返回c

isgraph(c);  //如果c是可打印字符且c不是空格,返回真
isprint(c);  //如果c是可打印字符(c可以是空格),返回真
iscntrl(c);  //如果c是控制符,返回真
ispunct(c);  //如果c是标点符号,返回真
isxdigit(c);  //如果c是十六进制数,返回真
isspace(c);  //如果c是空格字符,返回真
//空格字符包括: 空格' ', 水平定位字符'\t', 归位键'\r', 换行'\n', 垂直定位字符'\v', 翻页'\f'

四、string与数值的相互转换(可以直接当做模板)

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

//c++方法:将数值转换为string
string convert_to_string(double x)
{
    ostringstream o;
    if(o << x)
        return o.str();
    return "conversion error";
}
//c++方法,将string转化为数值
double convert_from_string(const string &s)
{
    istringstream i(s);
    double x;
    if(i >> x)
        return x;
    return 0.0;
}

int main()
{
    //将数值转换为string的c方法, 结合C++
    char b[10];
    string a;
    sprintf(b, "%d", 2017);  //数值转化为string
    a = b;
    cout << a << endl;
    //

    //c++方法:将数值转换为string
    string cc = convert_to_string(1976);
    cout << cc << endl;

    //c++方法,将string转化为数值
    string dd = "115165";
    int p = convert_from_string(dd) + 1;
    cout << p << endl;

    return 0;
}

五、字符的插入,删除,查找

  • 插入

string s1;
string::iterator it;    //定义迭代器
it = s1.begin();        //获取迭代器位置,此处为字符串首
s1.insert(it + 1, 'p'); //字符'p'插到第1个字符前(字符位置从零计数)

  • 删除

string s1;
string::iterator it;       //定义迭代器
it = s1.begin();           //获取迭代器位置,此处为字符串首
s1.erase(it + 3);          //删除从it起第三个元素(字符位置从零计数)
s1.erase(it, it + 4);      //删除it到it + 4间四个元素

  • 替换

string s1;
s1.replace(pos, num, char*c);  //替换从下标pos开始的num个元素替换为*c所指的元素
替换的样例

//头文件略
int main()
{
    string s1 = "abc123456";
    s1.replace(3, 3, "good");  //从下标3开始连续三个元素替换为good
    cout << s1 << endl;
    return 0;
}
//输出结果abcgood

  • 查找

string s1;                   //find函数有很多,这里只列举了一点点
s1.find('c');                //返回第一个字符'c'的下标,查不到返回4294967295,即string::npos
s1.find("c");                //返回第一个子串"c"的下标,查不到返回4294967295,即string::npos
s1.find("good");             //返回第一个子串"good"的下标,查不到返回4294967295
s1.find('c', pos);           //从下标pos开始,返回第一个字符'c'的位置
s1.find("c", pos);           //从下标pos开始,返回第一个子串"c"的位置
s1.find("good", pos, num);   //从下标pos开始,返回子串中前num个子串在s1中的位置

s1.rfind('c', pos);          //从pos开始从后往前查找字符'c'在s1中的下标
s1.rfind("c", pos);          //从pos开始从后往前查找子串'c'在s1中的下标
s1.rfind("good", pos, num);  //从下标pos开始从后往前查找,返回子串中前num个子串在s1中的位置

原文链接:http://blog.youkuaiyun.com/qq_32680617/article/details/51122395

参考 :http://blog.youkuaiyun.com/yzl_rex/article/details/7839379


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值