字符串分割
char* strtok_s(char* _String, char const* _Delimiter, char** _Context);
参数: 1、源字符串 2、分割符 3、切割后剩余的字符串,例如:ff,gg ,以,号分割,ff会被函数返回,gg则存在 _Context 中 返回值:指向被分割出片段的指针
在第一次调用时,strtok()必需给予参数_String字符串,往后的调用可以将参数_Str设置成NULL。每次调用成功则返回指向被分割出片段的指针。
需要调用者在连续切分相同源字符串时,除了将_String参数赋值为NULL,还要传递上次切分时保存下的_Context。
示例:
char ca[] = "zzz[fff]aa,bb,cc";
p[i] = strtok_s(ca, "]", &buf);
cout << p[i] << " 分割 " << buf << endl;
while (p[i]) {
i++;
p[i] = strtok_s(NULL, ",", &buf);
if (NULL == p[i])
break;
cout << p[i] << endl;
}
截取字符str前的元素,或后的元素
string stream = "hellfllgg";
string str = "f";
int nPos = stream.find(str);
if (nPos != -1) {
string st2 = stream.substr(0, nPos);
cout << endl << st2;
}
if (nPos != -1) {
string st1 = stream.substr(nPos + str.size(), stream.size());
cout << endl << st1;
}
cout << stream;
find( )函数: 功能:用于在指定范围内查找和目标元素值相等的第一个元素。 返回值:指向范围中与val比较相等的第一个元素的迭代器
substr( ),复制子字符串
定义:string substr (size_t pos = 0, size_t len = npos) const;
复制从字符位置 pos 开始并跨越 len 个字符的部分(或直到字符串的结尾)。
std::string str="We think in generalities, but we live in details.";
std::string str2 = str.substr (3,5);
std::size_t pos = str.find("in");
std::string str3 = str.substr (pos);
std::cout << str2 <<"\n"<<str3<<"\n";
find_first_not_of( ):不匹配的第一个字符
size_t find_first_not_of (const string& str, size_t pos = 0) const noexcept;
在字符串中搜索与参数str不匹配的第一个字符。 当指定pos时,仅搜索pos位置后的字符,忽略之前的。
std::string str ("fvvvvvbagff cc");
std::size_t found = str.find_first_not_of("v",3);
if (found!=std::string::npos)
{
std::cout << str[found]<<"\n";
std::cout << found << '\n';
}
可以配合erase来删除字符串前尾的空格
string s = " ffjdkjfk ";
strToken.erase(0, s.find_first_not_of(" "));
strToken.erase(s.find_last_not_of(" ") + 1);
strstr,查找子串第一次出现的位置
char * strstr ( const char * str1, const char * str2 );
返回值:str2在str1中第一次出现的位置,没有就返回空。
char str[] ="Tjjajjjhhhhhhh";
char * pch;
pch = strstr (str,"a");
if (pch != NULL)
strncpy (pch,"vvvv",2);
puts (str);
return 0;
strncpy,复制字符串
char * strncpy ( char * destination, const char * source, size_t num );
复制 num 个 source 字符串到 destination 中,source为要复制的字符串。
erase,删除元素
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
有三种用法:
(1)erase( pos, n); 删除从pos开始的n个字符,例如erase( 2, 7),删除2位置开始的7个字符
(2)erase( position); 删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符,(first和last都是迭代器)
以空格分开字符串
‘“>>” 输入时检测到空白就会扔掉
istringstream s("ff kkk erere");
string f;
while (s>>f)
{
cout << f << endl;
}
|