首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ string能不能转化为const char* 怎么转化

2013-03-25 
C++ string能不能转化为const char* 如何转化string sum accumulate(svec.begin(), svec.end(), )str

C++ string能不能转化为const char* 如何转化

string sum = accumulate(svec.begin(), svec.end(), "");
string sum = accumulate(svec.begin(), svec.end(), string(""));


的区别


[解决办法]
跟string能否转换成const char *没关系
string sum = accumulate(svec.begin(), svec.end(), ""); 
关键在这里最后一个参数不是左值 是一个只读的值
而第2个
string sum = accumulate(svec.begin(), svec.end(), string(""));
最后一个参数是一个改变的临时变量
accumulate的代码实现大概意思就是
accumulate(  iterator start ,iterator end, val)
{
    for ( iterator i = start ; i != end ; i++ )
   {
        val += *i;
    }
    return val;
}
[解决办法]
首先,std::string有一个c_str()方法,返回一个const char*
参考:http://www.cplusplus.com/reference/string/string/c_str/

其次,accumulate是把指定的迭代器范围中的值相加,赋给第三个参数,并且返回相加的结果。
原型请参考:http://www.cplusplus.com/reference/numeric/accumulate/
string sum = accumulate(svec.begin(), svec.end(), string(""));
最后一个参数是临时变量

比如 svec是内容是“Hello ”“World ”“!!”
string tmp_str("");
string sum = accumulate(svec.begin(), svec.end(), tmp_str);
sum 的值是 “Hello World !!”
[解决办法]
当然不一样啊,关键是你的svec是什么类型的,如果是vector<string>, 第一种写法是编译不过的啊,需要指明类型


#include <iostream>
#include <string>
#include <vector>
#include <numeric>
using namespace std;

int main(int argc, char *argv[])
{
    vector<string> svec;
    string sum;

    for (char ch = 'A'; ch != 'Z'; ++ch)
        svec.push_back(string(1, ch));

    sum = accumulate< vector<string>::const_iterator, string>(svec.begin(), svec.end(), "");
    cout << sum << endl;

    sum = accumulate(svec.begin(), svec.end(), string(""));
    cout << sum << endl;

    return 0;
}

热点排行