我想知道這是否是將字符串分解爲特定變量的安全方式。我目前沒有得到正確的結果。需要newFirstName來包含Joe。 newLast名稱包含Robbin。 NewTeam包含油工等等。我目前得到的是除了newFirstname之外的所有變量。正確方向的一點將不勝感激。如何用特定分隔符分隔字符串?
string line = "Joe|Robbin|Oilers|34|23";
char* strToChar = NULL;
char* strPtr = NULL;
string newFirstName = " ";
string newLastName = " ";
string newTeam = " ";
int newAssists = 0;
int newGoals = 0;
sscanf(line.c_str(), "%[^|]s%[^|]s%[^|]s%d|%d",(char*)newFirstName.c_str(), (char*)newLastName.c_str(), (char*)newTeam.c_str(), &newGoals, &newAssists);
看到許多偉大的答案,但我做之前,我想出了:
string line = "Joe|Robbin|Oilers|34|23";
char* strToChar = NULL;
char* strPtr = NULL;
string newFirstName = " ";
string newLastName = " ";
string newTeam = " ";
int newAssists = 0;
int newGoals = 0;
int count = 0;
std::string delimiter = "|";
size_t pos = 0;
std::string token;
while ((pos = line.find(delimiter)) != std::string::npos)
{
count++;
token = line.substr(0, pos);
std::cout << token << std::endl;
line.erase(0, pos + delimiter.length());
switch (count)
{
case 1:
newFirstName = token;
break;
case 2:
newLastName = token;
break;
case 3:
newTeam = token;
break;
case 4:
newGoals = atoi(token.c_str());
break;
}
}
newAssists = atoi(line.c_str());
您不能分配到'.c_str()'這種方式。字符串沒有足夠的空間分配給您放入它們的字符串。 – Barmar
*我想知道這是否是將字符串分解成特定變量的安全方式* - 快速回答 - 不可以。停止使用強制轉換,並停止使用「C」。 – PaulMcKenzie
爲什麼'std :: string :: c_str()'返回const char *'有一個原因 - 你不能直接修改字符串。 – Barmar