C++:如何构建字符串/字符*
Posted
技术标签:
【中文标题】C++:如何构建字符串/字符*【英文标题】:C++: How to build Strings / char* 【发布时间】:2010-02-18 13:45:33 【问题描述】:我是 C++ 新手。我想做一个char*
,但我不知道怎么做。
在 Java 中就是这样:
int player = 0;
int cpu = 0;
String s = "You: " + player + " CPU: " + cpu;
我该怎么做?我需要一个char*
。
我专注于在字符串后面粘贴整数。
【问题讨论】:
你到底想做什么?您需要一个采用 char * 的方法并用它做什么?您稍后在帖子中与您的示例相矛盾。请清楚您到底需要什么。 既然您坚持不使用 C++ 结构,您应该从您的问题中删除 C++,而是询问 C。此时您可以接受 sprintf 的答案。 没有。您的编译器没有损坏。 【参考方案1】:如果你能提供帮助,你几乎肯定不想处理 char * - 你需要 C++ std::string 类:
#include <string>
..
string name = "fred";
或相关的字符串流类:
#include <sstream>
#include <string>
#include <iostream>
using namespace std;
int main()
int player = 0;
int cpu = 0;
ostringstream os;
os << "You: " << player << " CPU: " << cpu;
string s = os.str();
cout << s << endl;
如果你真的需要一个字符指针(而且你还没有说明你为什么这么认为),你可以使用它的 c_str() 成员函数从字符串中获取一个。
任何介绍性 C++ 教科书都应涵盖所有这些内容。如果您还没有购买,请获取Accelerated C++。您无法仅从 Internet 资源中学习 C++。
【讨论】:
同意除最后一条评论之外的所有内容...网上有一些非常出色的 C++ 资源和教程,包括“A Beginner's C++”、“Learn C++ in 21 Days”、“Parashift C++ FAQ Lite”和“高级 C++ 课程”。当然,也需要练习。 关于 char* 请求...假设函数不会写入字符串,可以使用 const_cast如果您使用 C++,只需使用 std::string
。如果您使用char*
,您可能希望直接使用C。如果是 C,您可以使用 sprintf
函数:
char* s = // initialized properly
sprintf( s, "You: %d CPU: %d", player, cpu );
【讨论】:
我是新手。我需要如何初始化s
?
例如char s[50]
用于 49 个字符(+ 0 字符用于字符串终止)或char* s = new char[50]
用于动态分配。【参考方案3】:
只需致电s.c_str( );
.Here 即可查看更多信息。
PS。您可以使用strcpy
将内容复制到新变量,然后您就可以更改它。
【讨论】:
但是我得到了const char*
,我需要char*
。我尝试使用const_cast<char*>(str)
,但它在 c++ 库中出现错误。
我建议你在这里详细说明你想要做的事情。
尝试 const_castchar *
表示“指向字符的指针”。
您可以像这样创建指向“字符串”的指针:
char* myString = "My long string";
您也可以使用 std::string:
std::string myStdString("Another long string");
const char* myStdString.c_str();
请注意上一个示例开头的 const。这意味着您不能更改指向的字符。您可以对第一个示例执行相同操作:
const char* = "My long string";
【讨论】:
【参考方案5】:考虑使用字符串流:
#include <iostream>
#include <sstream>
using namespace std;
int main ()
int i = 10;
stringstream t;
t << "test " << i;
cout << t.str();
【讨论】:
但它会返回字符串而不是 char*。 我认为 cout (t.str().c_str());将返回他需要的 char *,但这很丑陋。如果 OP 必须有 char *,我建议使用 Rupert Jones 发布的 sprintf 解决方案。【参考方案6】:如果 C++ 像你展示的那样重载了“+”运算符,那可能是最好的。可悲的是,他们没有(如果你愿意,你可以)。
C++中将整数变量转换为字符串的方法基本有3种;两个继承自 C,一个新继承自 C++。
-
itoa() 例程。这实际上是非标准的,但大多数编译器都有它。它的好处是它返回一个指向字符串的指针,所以它可以用于函数式编程。
sprintf()。来自 C 的第二次保留,此例程采用目标字符串、格式字符串和参数列表。有多少参数,以及如何解释它们取决于“格式”字符串的解析方式。这使得 sprintf 既非常强大又非常危险。如果您使用这种方法,我几乎可以保证您在最初的几次尝试中都会遇到崩溃错误。
std::ostringstream。 C++ 方式。这几乎具有 sprintf() 的所有功能,但要安全得多。这里的缺点是你必须声明它,而且它不是一个字符串,所以你仍然需要在完成后将它转换为一个。这意味着至少需要三行代码才能使用 ostringstream 执行任何操作。它也很丑陋,特别是如果您尝试任何特殊格式。
【讨论】:
以上是关于C++:如何构建字符串/字符*的主要内容,如果未能解决你的问题,请参考以下文章
c++字符串,删除字符'b'并将字符'a'替换为两个'd'的构建函数
当我不使用标准字符串时,如何在 C++ 中将字符串转换为 int?