将一个int []转换为字符串,而无需明确的c 循环

Convert an int [] to string without an explicit for loop in C++

本文关键字:循环 字符串 一个 int 转换      更新时间:2023-10-16

我需要将int[]转换为字符串。有std::to_string方法,但不需要数组作为输入。因此,在这里需要一个for循环。是否有一些方法可以在没有明确循环的情况下实现这一目标?像在Java中一样,我们可以将 java.util.Arrays.toString()用于此目的。

编辑:周围的任何可能的方法也会有所帮助,以优化的方式解决问题。

这将执行技巧

 #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更原始。例如,当作为参数传递给函数时,数组将转换为指针转换为其第一个元素,因此所谓的函数未接收有关元素数量的信息。

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

首先,使用参考来避免数组到点衰减。这样,您可以推断出数组的大小。您可以使用大小来生成一个从0到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();
}

nb:不要忘记包括:

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

然后您有:

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

尝试一下

#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;
}