我想从我的字符串中获取前两个字符。让我说我的字符串dbdir = "Dir"
和我的另一个字符串test = "20122"
。我想从test中获取前两个字符并将其与dbdir字符串组合。所以结果将是字符串组合= Dir20然后我想在另一个字符串中使用组合字符串作为文件。
这是我的代码
std::string dbdir = "Dir";
std::string test = "20122";
//strip first two chars from test//
std::string result_of_test_strip = ;
std::string combined = ""+ dbdir + result +"";
CString fileToOpen = "\"\\\\CAR\\VOL1\\Docs\\PRE\\15\\" + result_of_test_strip.c_str() + "\\" + filenum.c_str() + ".prt" + "\"";
建议的答案@therainmaker
std::string dbdir = "Dir";
std::string test = "20122";
std::string result = test.substr(0, 2);
std::string combined = dbdir + result;
CString fileToOpen = "\"\\\\CAR\\VOL1\\Docs\\PRE\\15\\" + combined.c_str() + "\\" + filenum.c_str() + ".prt" + "\"";
答案 0 :(得分:11)
您可以使用substr
函数提取字符串的任何相关部分。
在您的情况下,要提取前两个字符,您可以编写
string first_two = test.substr(0, 2) // take a substring of test starting at position 0 with 2 characters
前两个字符的另一种方法可能是
string first_two;
first_two.push_back(test[0]);
first_two.push_back(test[1]);
此外,在string_combined
行中,您无需在开头和结尾添加空字符串""
。以下行也可以使用:
string combined = dbdir + result;
答案 1 :(得分:2)
您目前获得的错误来自此行:
CString fileToOpen = "\"\\\\CAR\\VOL1\\Docs\\PRE\\15\\" + combined.c_str() + "\\" + filenum.c_str() + ".prt" + "\"";
...因为它试图添加指针。字符串文字计算为指向文字存储开头的指针。同样,combined.c_str()
生成指向用于其内容的存储的指针。将这些指针添加到一起并不起作用(当然,在表达式的其余部分中你有更多相同的内容)。
您通常希望对std::string
个对象进行操作,然后当您完成所有操作时,可以从结果中创建CString
。 (或者,您可以在整个过程中使用CString
,等同于假设您正在使用MFC的CString
)。无论哪种方式,您都希望避免尝试对原始指针进行大量操作。
考虑到你在这里使用反斜杠的数量,你可以考虑至少使用一个前导文字的原始字符串。在进行操作之前,我还将其放入std::string
:
std::string prefix = R"-("\\CAR\VOL1\Docs\PRE\15\)-";
然后创建连接字符串应该如下所示:
CString fileToOpen = (prefix + combined + "\\" + filenum + ".prt\"").c_str();