find & substr
根据分隔符选择需要的子串
#include <iostream>
#include <string>
using namespace std;
int main()
{
string findee = "This-is-a-string";
string finder = "This";
string::size_type n1, n2, n3;
if ((n1 = findee.find(finder, 0)) != string::npos)
{
n2 = findee.find("-", n1);
n3 = findee.find("-", n2 + 1);
string sub1, sub2;
sub1 = findee.substr(n1, n2 - n1);
sub2 = findee.substr(n2 + 1, n3 - 1 - n2);
cout << n1 << "," << n2 << "," << n3 << endl;
cout << findee << endl;
cout << sub1 << endl;
cout << sub2 << endl;
}
else
cout << "No found.\n";
}
// 输出
0,4,7
This-is-a-string
This
is
模糊查询
查询所有的“小二”
#include <iostream>
#include <string>
using namespace std;
int main()
{
string findee = "-王小二-88-张小二-90-";
string finder = "小二";
string::size_type n1, n2, n3, last_pos = 0;
cout << "finder: " << finder << endl;
while (true)
{
string::size_type pos = findee.find(finder, last_pos);
if (pos != string::npos)
{
n1 = findee.rfind("-", pos); // 找到名字前面的 "-"
n2 = findee.find("-", pos);
string name = findee.substr(n1 + 1, n2 - n1 - 1);
cout << name << endl;
last_pos = n2;
}
else
break;
}
return 0;
}
// 输出
finder: 小二
王小二
张小二
字符串倒序
注意,字符串string的 []
运算符是只读的,不可写,所以需要建立一个字符串 temp
进行赋值
#include <iostream>
#include <string>
using namespace std;
void reverse(string &str)
{
int i, len = str.size();
string temp = str;
for (i = 0; i < len; ++i)
{
temp[i] = str[len - 1 - i];
}
str = temp;
}
int main()
{
string str = "你是谁";
reverse(str);
cout << str << endl;
return 0;
}
字符串偏移(加密)
#include <iostream>
#include <string>
using namespace std;
#include <iostream>
#include <string>
using namespace std;
void encode(string &str)
{
int i, len = str.size();
string temp = str;
for (i = 0; i < len; ++i)
{
temp[i] = str[len - 1 - i];
}
str = temp;
}
void decode(string &str)
{
int i, len = str.size();
string temp = str;
for (i = 0; i < len; ++i)
{
temp[i] = str[len - 1 - i] - 15;
}
str = temp;
}
int main()
{
string str = "asddsa";
encode(str);
decode(str);
cout << str << endl;
return 0;
}
// 输出