将string :: iterator转换为std :: string

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将string :: iterator转换为std :: string相关的知识,希望对你有一定的参考价值。

现在这对我来说有点混乱,但是std :: string :: iterator实际上产生了一个char(由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);
    }
}

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

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

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>

Demo

以上是关于将string :: iterator转换为std :: string的主要内容,如果未能解决你的问题,请参考以下文章

将 std::__cxx11::string 转换为 std::string

将 std::__cxx11::string 转换为 std::string

将 std::string 转换为 std::wstring 时,C++17 codecvt 抛出“错误转换”

如何将 std::string 转换为 NSString?

使用 Guava 将 Iterable 转换为数组

C++ .NET 将 System::String 转换为 std::string