关于C++ std::string 字符串转大小写的问题

问题描述:

Expression: cannot seek string iterator after end

在mfc的类cstring中有现成的字符串转大小写,但是C++的std::string中并没有现成的函数提供大小写转换功能,不过可以通过#include 头文件中的transform函数实现大小写转换

#include 
#include    //使用string的大小写转换
using namespace std;

char exchange(char c)
{
    if (c <= 'Z' && c >= 'A')
        c = tolower(c);
 
    else if (c >= 'a' && c <= 'z')
        c = toupper(c);
 
    return c;
}
 
int main()
{
    string strTmp = "short";
    transform(strTmp.begin(), strTmp.end(), strTmp.begin(), ::toupper); //转换成大写
    transform(strTmp.begin(), strTmp.end(), strTmp.begin(), ::tolower); //转换成小写
    transform(strTmp.begin(), strTmp.end(), strTmp.begin(), exchange);  //大小写互换
}

上述的代码本来并无问题,

但是实际中如果使用如下语句则会出现如下错误

//将字符串转换为小写
    using namespace std;
    string tmps(strProcessName);
    string strProcessNamedst;
    //strProcessNamedst.resize(tmps.size());
    transform(tmps.begin(), tmps.end(), strProcessNamedst.begin(), ::tolower);

关于C++ std::string 字符串转大小写的问题_第1张图片

 上述错误表示迭代器在字符串end后出现错误,因为使用了未定义的string变量, string strProcessNamedst;只是声明了一个string变量,此时strProcessNamedst并未分配内存空间

该问题源于未给容易分配空间大小导致迭代器错误

strProcessNamedst.resize(tmps.size());这句将目标string分配空间即可解决该问题

你可能感兴趣的:(c++,开发语言)