将字符串::迭代器转换为标准::字符串

Convert string::iterator to std::string

本文关键字:字符串 标准 迭代器 转换      更新时间:2023-10-16

现在这对我来说有点令人困惑,但是std::string::iterator实际上会产生一个字符(如typeid所示(。不过我需要它作为字符串。我该怎么做?

#include <string>
#include <iterator>
int main(){
    std::string str = "Hello World!";
    for( std::string::iterator it = str.begin(); it != str.end(); it++ ){
        std::string expectsString(*it); // error
        std::string expectsString(""+*it); // not expected result
        myFunction(expectsString);
    }
}

我正在使用启用了 C++11 的 gcc 5.4.0。

编辑:因为这需要进一步澄清我想将*it转换为字符串。所以我可以使用当前迭代的字符作为字符串,而不是字符。正如我在上面的代码示例中的失败示例所示,我正在寻找类似的东西

std::string myStr = *it; //error

改用

std::string expectsString(1, *it); 

这是一个演示程序

#include <iostream>
#include <string>
int main() 
{
    std::string str = "Hello World!";
    for( std::string::iterator it = str.begin(); it != str.end(); it++ )
    {
        std::string expectsString( 1, *it );
        std::cout << expectsString;
    }
    std::cout << std::endl;
    return 0;
}

它的输出是

Hello World!
std::string expectsString{ *it };

也可以使用范围构造函数从it构造长度为 1 的字符串

std::string expectsString(it, it+1);

另一种选择:

std::string expectsString{*it};   // Use initializer_list<char>
std::string expectsString({*it}); // Use initializer_list<char>

演示

您可以声明字符串,稍后可以使用它来将 *it 存储到该字符串中,并且可以在任何地方将其用作字符串。

std::string el;
 list <std::string> :: iterator it;
 for(it = variableOrder.begin(); it != variableOrder.end(); it++){
                el = *it;
            
                cout << el << endl;
            }