【问题标题】:How to copy array char into string or int* (void *) in c++? [closed]如何在 C++ 中将数组 char 复制到字符串或 int* (void *) 中? [关闭]
【发布时间】:2015-01-04 11:02:12
【问题描述】:

我有多个 char 数组要复制到一个字符串或 void * 或 int * 中。例如,

char c1[] = "Hello";
char c2[] = "World";
char c3[] = "!!!!";

我想复制到一个 int* (void*) 或字符串中。

【问题讨论】:

  • 您能详细说明一下吗?为什么要将字符串复制成整数(int *)?
  • 至于std::string,你稍微看一下就很简单了。
  • 这里是如何将其复制到字符串stackoverflow.com/questions/8960087/…
  • @JoachimPileborg 你好,我是 C++ 初学者。我从一个 udp 连接收到消息。他们给我发送字节[],我收到字符[]。我试过了,如果我打印到 int[] 中,那将是正确的。所以我认为是否有某种方式直接将 char[] 复制到 int* 中而无需循环。

标签: c++ arrays string


【解决方案1】:

我认为最简单的方法如下

#include <iostream>
#include <string>
#include <cstring>

int main() 
{
    char c1[] = "Hello";
    char c2[] = "World";
    char c3[] = "!!!!"; 

    size_t n = 0;

    for ( char *t : { c1, c2, c3 } ) n += strlen( t );

    std::string s;
    s.reserve( n );

    for ( char *t : { c1, c2, c3 } ) s += t;

    std::cout << s << std::endl;


    return 0;
}

输出是

HelloWorld!!!!

【讨论】:

  • 这不是最简单的方法。它可能(也可能不会)比s = string(c1)+c2+c3 更快,但肯定不会更简单。
  • @Mike Seymour 这是一个简单且非常清晰的代码。而且它足够高效。至少这是这里建议的最佳解决方案。
  • 好的,但是您可以删除一半,保持其余部分不变,并获得相同的结果(可能更有效,可能更少)。那无疑会更简单。除非您已经证明这会带来必要的性能改进,否则无需测量和保留大小。
  • @Mike Seymour 没问题。如果您确定保留内存不会提高效率,您可以删除前半部分代码:)
  • @Mike Seymour 这种方法很好,因为它是一种通用方法。例如,可以有一个向量或其他字符串或字符数组容器,而不是初始化列表。
【解决方案2】:

在 C++ 中,您可以简单地使用 + operator 附加字符串

string a = "abc";
string b = "dfg";
string c = a + b;
cout << c << endl;

【讨论】:

    【解决方案3】:

    使用 C++ 的 std::stringstd::stringstream 命名空间类会更容易:

    #include <sstream>
    #include <string>
    
    std::string c1("Hello");
    std::string c2("World");
    std::string c3("!!!!");
    
    std::stringstream ss;
    ss << c1 << c2 << c3;
    
    std::string finalString = ss.str();
    

    您不能将它们复制到int*void*,因为它们是完全不同的类型。

    【讨论】:

    • 当然,如果您只是玩弦乐,则不需要stringstreamc1 + c2 + c3 可以胜任。如果您还想格式化数字、用户定义的类型等,请使用流。
    • 感谢您指出我无法复制到 void * 或 int *,这很有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多