【问题标题】:Best way to add a char prefix to a char* in C++? [duplicate]在 C++ 中向 char* 添加 char 前缀的最佳方法? [复制]
【发布时间】:2013-06-11 05:11:24
【问题描述】:

我需要为 char* 添加一个前缀('X')(“很酷”)。

最好的方法是什么?

最简单的方法是什么?

char a = 'X';
char* b= " is cool";

我需要:

char* c = "X is cool";

到目前为止,我尝试了 strcpy-strcat,memcpy;

我知道这听起来是一个愚蠢的、未经研究的问题。 我想知道是否有一种方法可以将 char 添加到数组而不将 char 转换为字符串。

【问题讨论】:

  • char* b= " is cool"; 现在格式不正确,顺便说一句。应该是char const* b= " is cool";char b[]= " is cool";
  • strcat 非常简单。
  • 到目前为止你尝试了什么?
  • 您对“最佳”的定义是什么?最容易读/写代码,运行速度最快,占用内存最少,在某些“艺术品” IOCCC 比赛中看起来最美观?
  • @SBI strcat() 可能很简单,但请注意问题要以char a = 'X' 开头,这不是[const] char *[const],因此strcat() 不是一个合适的解决方案(至少没有一些预处理......)。

标签: c++ string pointers char memcpy


【解决方案1】:

使用 C++ 标准库代替 C 库函数怎么样?

auto a = 'X';
auto b = std::string{" is cool"};
b = a+b;

或简称:

auto a ='X';
auto b = a+std::string{" is cool"};

请注意,显式转换为字符串是强制性的。

【讨论】:

  • 我相信这就是我要找的东西。以前从未用 c++ 编程,只有 c,我不确定它是否可以处理 + 连接,如 java、js 或其他语言。
  • 你可以,除了字符串文字的串联,这不起作用。
  • @VladOtrocol 请注意,+ 连接适用于 std::string 对象(应在 C++ 中使用),但不适用于 char* C 样式字符串(应避免 在 C++ 中)。
  • 谢谢 .. 效果很好
【解决方案2】:

您使用的是 C++,因此为此目的,不要将 char* 用于字符串,使用 std::string

std::string str = std::string("X") + std::string(" is cool");
// Or:
std::string str = std::string("X") + " is cool";
// Or:
std::string str = 'X' + std::string(" is cool");
// Or:
std::string str = std::string{" is cool"};

这就像一个魅力,它表达了你的意图,它易读且易于输入。 (主观的,是的,但无论如何。)


如果您确实需要使用char*,请注意char* b = " is cool"; 无效,因为您使用的是字符串文字。考虑使用char b[] = " is cool";是一个字符数组。

您将使用strcat 确保为destination 字符串分配了足够的内存。

char a[32] = "X"; // The size must change based on your needs.
                  // See, this is why people use std::string ;_;
char b[] = " is cool";

// This will concatenate b to a
strcat(a, b);

// a will now be "X is cool"

但是认真的人,避免使用 C++ 的 C 端,你会更快乐,更有效率[需要引用]。

【讨论】:

  • “这就像一个魅力,它表达了你的意图,它可读且易于输入。”没有。它表达了意图,但不会编译,因为添加两个 char const* 对于编译器来说是无意义的。对于您答案的另一部分:为什么先告诉他使用 C++,然后再使用不安全的 C 函数?
  • @ArneMertz 我注意到的是,当人们不使用 STL 时,他们正在做作业或其他事情。
  • 好吧,要么他允许使用STL,然后给他干净的解决方案就足够了,并向他展示了一些新的东西来学习。或者他不允许使用它,那么他应该在问题中明确说明,我们不应该鼓励他写草率的问题;-)
【解决方案3】:

也许您可以使用字符串而不是 char* ?

std::string p = " is cool";
std::string x = 'X' + p;

【讨论】:

    【解决方案4】:

    试试,

    char a[20] = "X";
    char b[] = " is cool";
    strcat(a,b);
    

    【讨论】:

    • 这是不安全的 wrt 字符串长度:如果您将字符串从“很酷”更改为“真的,真的,很酷”,你会得到 UB。
    猜你喜欢
    • 2015-01-08
    • 2018-10-25
    • 1970-01-01
    • 2022-08-11
    • 2017-11-25
    • 2010-12-16
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    相关资源
    最近更新 更多