大家好,我有以下几行:
string* playerInfo = "Name: " + firstName + " " + lastName + "\n" +
"Number: " + playerNumber + "\n" +
"Points: " + pointTotal + "\n";
其中firstName,lastName,playernumber,pointTotal都是字符串指针。
如何将它们全部放在另一个字符串指针中?编译器抱怨我的代码行。
抱歉,我不熟悉C ++,我来自Java背景。
答案 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)
#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
}