将向量中的所有元素组合成一个新的字符串 MFC VC++

Posted

技术标签:

【中文标题】将向量中的所有元素组合成一个新的字符串 MFC VC++【英文标题】:Combine all elements in vector into a new string MFC VC++ 【发布时间】:2020-11-11 07:37:35 【问题描述】:

我正在尝试将向量中的所有元素组合为一个新字符串,但我无法获得如何执行此操作的示例。大多数示例都在向量之间连接,并且在 C++ std::cout 中也是如此。我不知道如何在 MFC VC++ 中做到这一点。

假设我有一个向量(在 CString 中),其中包含元素 I am a naughty boy。我怎样才能将它们组合起来并将它们保存为一个

CString str;

str = "I am a naughty boy"

已编辑:

struct REVLISTDATA 
CString str_;
REVLISTDATA(CString str_element) : str_(str_element) 
;
std::vector<REVLISTDATA> vec;

【问题讨论】:

这能回答你的问题吗? std::vector to string with custom delimiter 目前还没有,我不知道如何在VC++中应用它们 【参考方案1】:

如果我很理解您的要求,这里有一个方法:

for (size_t i = 0; i < vec.size(); ++i)

    str.AppendFormat(vec.at(i));
    if (i < vec.size() - 1)
        str.AppendFormat(_T(" "));  // spaces between words

假设您的 vecstd::vector&lt;CString&gt;

编辑:所以,你应该使用str.AppendFormat(vec.at(i).str_);而不是str.AppendFormat(vec.at(i).str_);

稍后编辑:我已经尝试了以下代码并且工作正常:

struct REVLISTDATA

    CString str_;
    REVLISTDATA(CString str_element) : str_(str_element) 
;

std::vector<REVLISTDATA> vec;

vec.push_back(REVLISTDATA("I"));
vec.push_back(REVLISTDATA("am"));
vec.push_back(REVLISTDATA("a"));
vec.push_back(REVLISTDATA("naughty"));
vec.push_back(REVLISTDATA("boy"));

CString str;
for (size_t i = 0; i < vec.size(); ++i)

    str.AppendFormat(vec.at(i).str_);
    if (i < vec.size() - 1)
        str.AppendFormat(_T(" "));  // spaces between words

所以,我猜你的异常来自其他方式。

【讨论】:

是的,我已经更新了问题中的向量,它在 CString 中,对吗?但是str.AppendFormat(vec.at(i)); 这一行有一个错误,输出显示 error C2664: 'void ATL::CStringT>>::AppendFormat(const wchar_t * ,...)': 无法将参数 1 从 'REVLISTDATA' 转换为 'UINT' 我尝试将其他字符串放入向量中,但出现此错误0xC0000005:访问冲突读取位置 我猜你正试图访问一个不存在的对象。稍后我会为你准备一段代码。 找到了根本原因,这是我将字符串push_back到向量中时的错误。代码运行良好!

以上是关于将向量中的所有元素组合成一个新的字符串 MFC VC++的主要内容,如果未能解决你的问题,请参考以下文章

R + 将一个向量列表组合成一个向量

如何将词嵌入向量组合成一个向量?

MFC 中的广播组

如何将数组元素组合成一个新数组?

【R】数值型向量及运算

将多个集合组合成一个逻辑集合?