在C ++中没有显式的for循环将int []转换为字符串

时间:2017-12-29 06:06:34

标签: c++ arrays string

我需要将std::to_string转换为字符串。有java.util.Arrays.toString()方法,但它不接受数组作为输入。因此,需要for循环Any: 'static。有没有一种方法我可以在没有明确的for循环的情况下实现这个目的?与Java一样,我们可以使用MyArray=np.array([np.array([1,2,3,.75]),np.array([1,2,2,.32]),np.array([1,2,3,.88])]) 来实现此目的。

编辑:任何可行的方式都会有所帮助,以优化的方式解决问题。

3 个答案:

答案 0 :(得分:3)

这样就可以了解

 #include <iostream>       
 #include <sstream>      
 #include <iterator>       
 #include <algorithm>
 #include <string>

 int main()
 {
      int x[] = {1,2,3,4,5};     // sample array

      std::ostringstream os;
      std::ostream_iterator<int> out(os, " ");
      std::copy(std::begin(x), std::end(x), out);
      std::string result = os.str();
 }

请记住result在最后int值之后会有一个尾随空格。我会把它当作练习去除。

稍微更隐晦。

      std::ostringstream os;
      std::copy(std::begin(x), std::end(x), std::ostream_iterator<int>(os, " "));
      std::string result = os.str();

在C ++中,你不会得到与Java完全相同的东西,因为int []在C ++中比在Java中更原始。例如,当作为函数的参数传递时,数组将转换为指向其第一个元素的指针,因此被调用的函数不会接收有关元素数量的信息。

答案 1 :(得分:2)

您可以通过使用某些元编程来避免循环。想法是在编译时展开循环:

首先,使用引用来避免数组到指针的衰减。这样,您可以推断出数组的大小。您可以使用该大小生成从0到size-1的编译时std::size_t序列,并将数组和序列提供给实现函数:

template <std::size_t N>
std::string to_string(int (&array)[N]) {
    return to_string_impl(array, std::make_index_sequence<N>());
}

在第二个函数中,您使用参数包扩展来生成展开的循环:

template <std::size_t N, std::size_t... Ns>
std::string to_string_impl(int (&array)[N], std::index_sequence<Ns...>) {
    std::ostringstream os;
    std::ostream_iterator<int> out(os, " ");
    int dummy[sizeof...(Ns)] = { (os << array[Ns], 0)... };
    /* generates:
       os << array[0]
       ...
       os << array[N-1]
    */
    return os.str();
}

注意:别忘了包括:

#include <iostream>
#include <utility>
#include <sstream>
#include <iterator>

然后你拥有它:

int main() {
    int arr[] = {1,2,3,4,5};
    std::cout << to_string(arr); // prints "12345"
}

答案 2 :(得分:-2)

试一试

#include <sstream>
#include <string>
#include <iostream>

std::string ToString(int number)
{
    std::string str;
    std::stringstream ssout;
    ssout << number;
    str = ssout.str(); 
    return str;
}
int main()
{
    std::string mystr;
    mystr = ToString(1234);
    std::cout<<mystr<<std::endl;
    getchar();
    return 0;
}