将一个int []转换为字符串,而无需明确的c 循环
Convert an int [] to string without an explicit for loop in C++
我需要将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;
}
相关文章:
- 在循环C++中指定字符串之后,不会打印该字符串
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- C++-字符串是否包含一个带有简单循环的单词
- 在 c++ 中查找字符串中没有循环的数字总和
- 比较两个字符串后卡在无限循环中
- C++ - 使用基于范围的 for 循环将字符值分配给向量中的字符串不会分配值
- 而循环跳过 cin.getline() 对于 C 字符串
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 如何使用将字符串拆分为 for 循环中的变量的程序
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 循环访问还包含未使用元素的字符串数组
- 循环访问资源字符串表
- C++ - 使用用户输入的字符串数据检查结构字符串数据(无限执行 while 循环)
- 修改向量中的字符串?(不使用循环)
- For 循环字符串忽略字符
- 如何按空格循环字符串?我怎么知道字符串中我当前所在的单词的索引号
- 在 c++ 中循环字符串读取器
- 如何在 c++ 中循环字符串
- 分段错误,通过std按字符循环字符串