sring 操作

初始化和赋值

复制代码
// string constructor
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string s0 ("Initial string");

  // constructors used in the same order as described above:
  string s1;
  string s2 (s0);
  string s3 (s0, 8, 3);
  string s4 ("A character sequence", 6);
  string s5 ("Another character sequence");
  string s6 (10, 'x');
  string s7a (10, 42);
  string s7b (s0.begin(), s0.begin()+7);

  cout << "s1: " << s1 << "\ns2: " << s2 << "\ns3: " << s3;
  cout << "\ns4: " << s4 << "\ns5: " << s5 << "\ns6: " << s6;
  cout << "\ns7a: " << s7a << "\ns7b: " << s7b << endl;
  return 0;
}
复制代码

 

复制代码
// string assigning
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str1, str2, str3;
  str1 = "Test string: ";   // c-string
  str2 = 'x';               // single character
  str3 = str1 + str2;       // string

  cout << str3  << endl;
  return 0;
}
复制代码

 

遍历所有的字符

复制代码
// string::operator[]
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str ("Test string");
  int i;
  for (i=0; i < str.length(); i++)
  {
    cout << str[i];
  }
  return 0;
}
复制代码

 

追加

复制代码
// appending to string
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str;
  string str2="Writing ";
  string str3="print 10 and then 5 more";

  // used in the same order as described above:
  str.append(str2);                       // "Writing "
  str.append(str3,6,3);                   // "10 "
  str.append("dots are cool",5);          // "dots "
  str.append("here: ");                   // "here: "
  str.append(10,'.');                     // ".........."
  str.append(str3.begin()+8,str3.end());  // " and then 5 more"
  str.append<int>(5,0x2E);                // "....."

  cout << str << endl;
  return 0;
}
复制代码

 

插入

复制代码
// inserting into a string
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str="to be question";
  string str2="the ";
  string str3="or not to be";
  string::iterator it;

  // used in the same order as described above:
  str.insert(6,str2);                 // to be (the )question
  str.insert(6,str3,3,4);             // to be (not )the question
  str.insert(10,"that is cool",8);    // to be not (that is )the question
  str.insert(10,"to be ");            // to be not (to be )that is the question
  str.insert(15,1,':');               // to be not to be(:) that is the question
  it = str.insert(str.begin()+5,','); // to be(,) not to be: that is the question
  str.insert (str.end(),3,'.');       // to be, not to be: that is the question(...)
  str.insert (it+2,str3.begin(),str3.begin()+3); // (or )

  cout << str << endl;
  return 0;
}
复制代码

 

删除

复制代码
// string::erase
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str ("This is an example phrase.");
  string::iterator it;

  // erase used in the same order as described above:
  str.erase (10,8);
  cout << str << endl;        // "This is an phrase."

  it=str.begin()+9;
  str.erase (it);
  cout << str << endl;        // "This is a phrase."

  str.erase (str.begin()+5, str.end()-7);
  cout << str << endl;        // "This phrase."
  return 0;
}
复制代码

 

替换

复制代码
// replacing in a string
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string base="this is a test string.";
  string str2="n example";
  string str3="sample phrase";
  string str4="useful.";

  // function versions used in the same order as described above:

  // Using positions:                 0123456789*123456789*12345
  string str=base;                // "this is a test string."
  str.replace(9,5,str2);          // "this is an example string."
  str.replace(19,6,str3,7,6);     // "this is an example phrase."
  str.replace(8,10,"just all",6); // "this is just a phrase."
  str.replace(8,6,"a short");     // "this is a short phrase."
  str.replace(22,1,3,'!');        // "this is a short phrase!!!"

  // Using iterators:                      0123456789*123456789*
  string::iterator it = str.begin();   //  ^
  str.replace(it,str.end()-3,str3);    // "sample phrase!!!"
  str.replace(it,it+6,"replace it",7); // "replace phrase!!!"
  it+=8;                               //          ^
  str.replace(it,it+6,"is cool");      // "replace is cool!!!"
  str.replace(it+4,str.end()-4,4,'o'); // "replace is cooool!!!"
  it+=3;                               //             ^
  str.replace(it,str.end(),str4.begin(),str4.end());
                                       // "replace is useful."
  cout << str << endl;
  return 0;
}
复制代码

 

查找

复制代码
// string::find
#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str ("There are two needles in this haystack with needles.");
  string str2 ("needle");
  size_t found;

  // different member versions of find in the same order as above:
  found=str.find(str2);
  if (found!=string::npos)
    cout << "first 'needle' found at: " << int(found) << endl;

  found=str.find("needles are small",found+1,6);
  if (found!=string::npos)
    cout << "second 'needle' found at: " << int(found) << endl;

  found=str.find("haystack");
  if (found!=string::npos)
    cout << "'haystack' also found at: " << int(found) << endl;

  found=str.find('.');
  if (found!=string::npos)
    cout << "Period found at: " << int(found) << endl;

  // let's replace the first needle:
  str.replace(str.find(str2),str2.length(),"preposition");
  cout << str << endl;

  return 0;
}
复制代码


string的扩展

复制代码
//stringutil.h
#include <string> 
#include <vector>
class StringUtil {
    public:
        static std::string trim(std::string str);
        static void split(std::string src, std::string delim, std::vector<std::string>& retVector);
};
复制代码

 

复制代码
//stringutil.cpp
#include "stringutil.h"
#include <cstring>
#include <iostream>
std::string StringUtil::trim(std::string str) {
    using namespace std;
    string dest = str;

    string::iterator i;
    for (i = dest.begin(); i != dest.end(); i++) {
        if (!isspace(*i)) {
            dest.erase(dest.begin(), i);
            break;
        }
    }

    if (i == dest.end()) {
        return dest;
    }

    for (i = dest.end() - 1; i != dest.begin(); i--) {
        if (!isspace(*i)) {
            dest.erase(i + 1, dest.end());
            break;
        }
    }

    return dest;
}

void StringUtil::split(std::string src, std::string delim, std::vector<std::string>& retVector) {
    using namespace std;
    size_t last = 0;
    size_t index = src.find(delim,last);
    while (index != string::npos)
    {
        string sub = src.substr(last,index-last);
        retVector.push_back(sub);
        last = index+1;
        index = src.find(delim,last);
    }
    if (last != (src.length()))
    {
        retVector.push_back(src.substr(last,index-last));
    }
}

int main() {
    using namespace std;
    string str1 = "123\t";
    string str2 = " 123 ";
    cout << "str1 trim:[" << StringUtil::trim(str1) << "]" << endl;
    cout << "str2 trim:[" << StringUtil::trim(str2) << "]" << endl;
    string str3 = "a;b;c;d";
    string delim = ";";
    vector<string> resultVec;
    StringUtil::split(str3, delim, resultVec);
    for (int i = 0; i< resultVec.size(); i++) {
        cout << "str " << resultVec[i] << endl;
    }
    return 0;
}
复制代码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值