0

我正在尝试将前 256 个 ASCII 字符存储在字符串数组中。

我有这样的事情:

   string values[256];
   for (int i=0; i<256; i++){
        char temp = i;
        values[i] = temp;
   }

但我似乎无法确切地弄清楚如何做到这一点。我得到的错误是:

   invalid conversion from 'char' to 'const char*'
4

4 回答 4

4

解决方案是这样做:

#include <string>

std::string values[256];
for (int i=0; i<256; i++){
  char temp = i;
  values[i] = temp;
}

从这里可以看出,这段代码没有任何问题。我假设您有充分的理由保留 256 个单个字符的数组std::strings

std::string有一个赋值运算符,它接受一个字符作为参数,所以上面的代码没有错。

于 2012-07-24T05:41:04.793 回答
1

这是c ++ 11中的一个衬里:

std::iota(std::begin(values), std::end(values), '\0');

iota 在<algorithm>header 中, begin 和 end 在<iterator>.

于 2012-07-24T07:04:48.367 回答
0

实际上,当您声明这样一个字符串数据类型的数组时,它将创建 256 个不同的字符串,每个字符串都能够存储尽可能多的字符,因为它们可以放入计算机的内存中

并且每个变量likevalues[i]都是指向内存中字符串的指针,这就是错误的原因。字符到字符指针

这就是为什么我们需要单个字符数组char values[256]来使两边的数据类型相同。

但是如果您想以相同的方式执行此操作,则需要将 ascii 值转换为字符串。

................................................ 一个字符串是一个字符组合

于 2012-07-24T06:36:25.440 回答
0

我们有一个从 0 到 127 的标准 ASCII 字符集和一个从 128 到 255 的扩展 ASCII。

如果您可以说明将 256 个字符存储在字符串数组中的目的,我们可以指导更合适的 STL 或其他解决方案。

如果您真的想像数组一样使用它,为什么不简单地将它用作字符数组或字符的 std::vector。

如果您想使用 std::string,请尝试以下操作:

   string str;
   str.reserve(256);
   str.clear();
   string::iterator iter;
   for(i=0;i<256;i++)
     iter=str.insert(str.begin()+i,i);
   //Do something with str here.
于 2012-07-24T06:39:36.517 回答