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

时间:2018-03-01 14:27:31

标签: c++ string iterator type-conversion

现在这对我来说有点混乱,但是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

4 个答案:

答案 0 :(得分:3)

改为使用

    DATE
NAME    
Neujahr 2016-01-01
Karfreitag  2016-03-25
Ostersonntag    2016-03-27
Ostermontag 2016-03-28
1. Mai  2016-05-01
Christi Himmelfahrt 2016-05-05
Pfingstsonntag  2016-05-15
Pfingstmontag   2016-05-16
Tag der deutschen Einheit   2016-10-03
Erster Weihnachtsfeiertag   2016-12-25
Zweiter Weihnachtsfeiertag  2016-12-26
Neujahr 2017-01-01
Karfreitag  2017-04-14
Ostersonntag    2017-04-16
Ostermontag 2017-04-17
1. Mai  2017-05-01
Christi Himmelfahrt 2017-05-25
Pfingstsonntag  2017-06-04
Pfingstmontag   2017-06-05
Tag der deutschen Einheit   2017-10-03
Erster Weihnachtsfeiertag   2017-12-25
Zweiter Weihnachtsfeiertag  2017-12-26

这是一个示范程序

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;
}

答案 1 :(得分:1)

std::string expectsString{ *it };

答案 2 :(得分:1)

另一种选择:

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

Demo

答案 3 :(得分:1)

还可以使用范围构造函数

it构造长度为1的字符串

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