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

问题描述 投票:1回答:3

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

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

c++ arrays string
3个回答
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中更原始。例如,当作为参数传递给函数时,数组将转换为指向其第一个元素的指针,因此被调用函数不会接收有关元素数量的信息。


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
投票

试试吧

#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.