如何从字符串中获取前两个字符并在另一个字符串中使用两个字符

时间:2015-10-20 11:35:43

标签: c++ visual-c++

我想从我的字符串中获取前两个字符。让我说我的字符串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" + "\"";

我在CString fileToOpen --->

中收到此错误

错误C2110:无法添加两个指针执行cl.exe时出错。

2 个答案:

答案 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();