将字符串连接成另一个字符串指针C ++

时间:2011-03-30 02:27:35

标签: c++ pointers string-concatenation

大家好,我有以下几行:

string* playerInfo = "Name: " + firstName + " " + lastName + "\n" +
                        "Number: " + playerNumber + "\n" +
                        "Points: " + pointTotal + "\n";

其中firstName,lastName,playernumber,pointTotal都是字符串指针。

如何将它们全部放在另一个字符串指针中?编译器抱怨我的代码行。

抱歉,我不熟悉C ++,我来自Java背景。

6 个答案:

答案 0 :(得分:8)

使用较少的指针。如果所有变量都只是字符串,那就行了。但既然你说你有指针:

string playerInfo = "Name: " + *firstName + " " + *lastName + "\n" +
                    "Number: " + *playerNumber + "\n" +
                    "Points: " + *pointTotal + "\n";

从Java迁移到C ++时,您应该首先考虑的一个习惯是使用new创建所有对象。在C ++中,new不是用于创建对象,而是用于内存分配。任何时候你都可以使用局部变量而不是动态分配。当你不能的时候,试着让像std::vector这样的图书馆提供的对象负责你的分配和解除分配。

答案 1 :(得分:2)

为了像这样把一堆碎片放在一起,我会使用stringstream,就像这样:

std::ostringstream buffer;
buffer << "Name: " << firstName << " " << lastName << "\n"
       << "Number: " << playerNumber << "\n"
       << "Points: " << pointTotal << "\n";

std::string PlayerInfo = buffer.str();

答案 2 :(得分:1)

Java背景是问题所在。

你不能用C ++做到这一点。指针指向内存中的位置。它们位于不同的位置,因此您不能将它们连接起来。

为什么使用字符串指针?您可能会在char *指针和string is in the STL之间感到困惑。

你可能只想使用没有指针的字符串。你可以这样做:

string str;
str.append("Name: ");
str.append(firstname);
// ...

您也可以使用+ =。

string str;
str += " ";
str += lastname;

但这很令人困惑,因为你不能这样做:

string str;
str += " " + " Name: "; // WRONG!

但你可以这样做:

string str;
string str2;
str = "Name: " + str2; // OK

所以我只是避开运算符+并使用.append。


答案 3 :(得分:1)

你可能只想:

std::string playerInfo = std::string("Name: ") + firstName + " " + lastName + "\n" +
                "Number: " + playerNumber + "\n" +
                "Points: " + pointTotal + "\n";

"Name"放入std::string然后会创建一系列operator+()次调用,从而产生连接。

你可能并不真的需要将playerInfo放在堆上,但如果你这样做,你可以拥有:

std::string* pOnHeap = new std::string(playerInfo);

答案 4 :(得分:0)

像Coffin先生使用“stringstream”的回答一样:

#include <iostream>
#include <sstream>
using namespace std;

stringstream buffer;     
buffer << "Name: " << firstName << " " << lastName << "\n"
       << "Number: " << playerNumber << "\n"
       << "Points: " << pointTotal << "\n";

cout << buffer.str() << endl;

答案 5 :(得分:0)

当你要求通过使用指针解决问题时,这是一个基本的学校代码解决方案:

int StringLength(const char * s){
int l = 0;
while (*s++) l++;
return l;
}

char *StrCat(const char * str1, const char *str2){
  int len1 = StringLength(str1);
  int len2 = StringLength(str2);
  int totLen = len1 + len2 + 1;

  char * str12 = (char *)malloc((totLen)*sizeof(char));
  memset(str12, '\0', totLen);

  for (int i = 0; i < len1; i++)
    *(str12 + i) = *(str1 + i);
  for (int i = 0; i < len2; i++)
    *(str12 + i + len1) = *(str2 + i);

  return str12;
}

int main(int argc, char *argv[]){
  char * S1= "ABCDE";
  char * S2= "FGH";

  char *S12 = NULL;
  S12 = StrCat(S1, S2);
  cout << "S12= "<< S12 << endl; // ABCDEFGH
}
相关问题