C ++,函数将数组作为字符串

时间:2018-04-26 12:49:37

标签: c++ arrays string function

我是C ++的新手,我正在尝试创建一个带有数字数组的函数,并将这些数字转换为ASCII字符,即int到string。当我尝试输出字符串但是我得到随机字符。我已经搜索了教程,并建议我应该添加一个字符串终结符,我做了,但它似乎没有解决它,我找不到可以解决这个问题的答案。

即。我想要下面的代码打印" Hello"。

#include <iostream>
#include <string>

char* intToString(int* array, int size)
{
    char string[size + 1];
    string[size] = '\0';
    for (int i = 0; i <= size; i++)
        string[i] = array[i];

    return string;
}


int main()
{
    int my_array[5] = {72, 101, 108, 108, 111};
    int size = 5;
    std::cout << intToString(my_array, size);

    return 0;
}

5 个答案:

答案 0 :(得分:1)

--platform不是字符串。它是char *的指针。在您的情况下,您会得到随机字符,因为您返回指向调用后销毁的本地char的指针。使用string或者,如果您希望数组那么多,您可以从std::string获得正确的复制语义。

答案 1 :(得分:1)

您的代码甚至不应该编译,因为size + 1不是编译时常量值,更改行

char string[size+1];

char string*=new char[size+1]

应该使您的代码编译并提供正确的输出,因为您在堆上创建了数组(因此在函数返回时不会销毁该数组)。但是这意味着你必须自己 destroy 删除它。

所以改变

是个好主意
std::cout << intToString(my_array, size);

char *string=intToString(my_array, size);
std::cout << string;
delete[] string;

虽然注意其他人的答案是正确的,你应该使用std :: string和std :: vector而不是一般的char数组和数组,你现在正在做的是将c与c ++混合。

答案 2 :(得分:0)

您编写的已更新解决方案中仍存在问题。

  • 您仍应使用string声明size+1数组,并且需要将最后一个元素设为\0
  • 或者您可以使用std::string

这是C ++的做法,它可以进一步缩短,但这可以接近你的代码。

#include <iostream>
#include <string>
#include <vector>

std::string intToString(const std::vector<int>& vec)
{
    std::string ans;
    for (auto& each : vec)
        ans += char(each);
    return ans;
}


int main()
{
    std::vector<int> vec{72, 101, 108, 108, 111};
    std::cout << intToString(vec);
    return 0;
}

答案 3 :(得分:0)

尽可能接近您的初步尝试:

timeout

请注意评论中指出的与您的解决方案的区别。

答案 4 :(得分:0)

在C ++ 11中std::to_string更可取。如果您需要多种类型的转换器功能和/或datacontainer,您可以使用这样的模板功能

#include <iostream>
#include <string>
#include <vector>
#include <array>

template <typename T>
std::string toString(const T & items) {
    std::string str;
    for (const auto & item : items) {
        str += std::to_string(item);
    }

    return str;
}


int main() {
    const std::vector<int> my_vector {102, 101, 108, 108, 111};
    std::cout << toString(my_vector);


    std::cout << std::endl;

    const std::array<double,5> my_array {102, 101, 108, 108.5, 111.0};
    std::cout << toString(my_array);
    return 0;
}