c++11及以后,data()和c_str()表现一样
c++11以前,有区别,如下
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
using std::cout;
using std::endl;
int main(void)
{
// 1
// std::string data;
// std::cin >> data;
// cout << data << endl;
// cout << data.length() << endl;
// 2
// 小于 0 表示当前的字符串小;
// 等于 0 表示两个字符串相等;
// 大于 0 表示另一个字符串小。
// std::string data1 = "abc";
// std::string data2 = "abd";
//
// int res = data1.compare(data2);
// cout << res << endl;
// 3
// std::string data1 = "this is ok";
// std::string data2 = data1.substr(2, 3);
// cout << data2 << endl;
// std::string data1 = "west";
// std::string data2 = "east";
// data1.swap(data2);
// cout << data1 << " " << data2 << endl;
// 4
// find:从前往后查找子串或字符出现的位置。
// rfind:从后往前查找子串或字符出现的位置。
// find_first_of:从前往后查找何处出现另一个字符串中包含的字符。例如:
// s1.find_first_of("abc"); //查找s1中第一次出现"abc"中任一字符的位置
// find_last_of:从后往前查找何处出现另一个字符串中包含的字符。
// find_first_not_of:从前往后查找何处出现另一个字符串中没有包含的字符。
// find_last_not_of:从后往前查找何处出现另一个字符串中没有包含的字符。
// std::string data;
// cin接收输入时,>> 是会过滤掉不可见字符(如 空格 回车,TAB 等)
// 从第一个非空白符开始读,直到空白符或文件结束为止
// std::cin >> data;
// int n;
// cout <<data <<endl;
// n = data.find('d');
// if (n != std::string::npos)
// {
// cout << n << endl;
// cout << data.substr(n) << endl;
// }
// std::string data;
// std::getline(std::cin, data);
// int n;
// cout << data <<endl;
// n = data.find(' ');
// if (n != std::string::npos)
// {
// cout << n << endl;
// cout << data.substr(n + 1) << endl;
// }
//
// n = data.rfind(' ');
// if (n != std::string::npos)
// {
// cout << n << endl;
// cout << data.substr(n + 1) << endl;
// }
// 5
// std::string data;
// std::getline(std::cin, data);
//
// std::istringstream s_data(data);
// std::string tmp;
// while(std::getline(s_data, tmp, ' '))
// {
// cout << tmp << ":" << tmp.length() << endl;
// }
// 6 replace
// std::string data {"Real Me"};
// data.replace(1, 2, "duohappy", 0, 3);
// cout << data << endl;
// int n = data.find("duo");
// data.replace(n, 3, "00000");
// cout << data << endl;
// 7 erase
// std::string data {"real me happy"};
// data.erase(1, 3); // 删除子串(1, 3)
// cout << data << endl;
// data.erase(2); // 删除下标2及其后面的所有字符
// cout << data << endl;
// 8 insert
// std::string data {"real" };
// data.insert(4, " me");
// cout << data << endl;
// 9 istringstream ostringstream 默认空格作为了分隔符
// std::string data {"name 12 2.5"};
// std::istringstream is_data{data};
// std::string name;
// int n;
// double d;
// is_data >> name >> n >> d;
// cout << name << ":" << name.length() << endl;
// cout << n << endl;
// cout << d << endl;
// std::ostringstream os_data;
// os_data << name << endl << n << endl << d << endl;
// cout << os_data.str();
std::string data {"adcbk"};
auto p = std::find(data.begin(), data.end(), 'k');
if (p != data.end())
{
cout << std::distance(data.begin(), p) << endl;
}
std::sort(data.begin() ,data.end());
cout << data << endl;
std::reverse(data.begin(), data.end());
cout << data <<endl;
return 0;
}
/*
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1("Source Code");
int n;
if ((n = s1.find('u')) != string::npos) //查找 u 出现的位置
cout << "1) " << n << "," << s1.substr(n) << endl;
//输出 l)2,urce Code
if ((n = s1.find("Source", 3)) == string::npos)
//从下标3开始查找"Source",找不到
cout << "2) " << "Not Found" << endl; //输出 2) Not Found
if ((n = s1.find("Co")) != string::npos)
//查找子串"Co"。能找到,返回"Co"的位置
cout << "3) " << n << ", " << s1.substr(n) << endl;
//输出 3) 7, Code
if ((n = s1.find_first_of("ceo")) != string::npos)
//查找第一次出现或 'c'、'e'或'o'的位置
cout << "4) " << n << ", " << s1.substr(n) << endl;
//输出 4) l, ource Code
if ((n = s1.find_last_of('e')) != string::npos)
//查找最后一个 'e' 的位置
cout << "5) " << n << ", " << s1.substr(n) << endl; //输出 5) 10, e
if ((n = s1.find_first_not_of("eou", 1)) != string::npos)
//从下标1开始查找第一次出现非 'e'、'o' 或 'u' 字符的位置
cout << "6) " << n << ", " << s1.substr(n) << endl;
//输出 6) 3, rce Code
return 0;
}
*/