【问题标题】:Arrays: Passing Index of String Array to Index of Int Array for Output only数组:将字符串数组的索引传递给 Int 数组的索引,仅用于输出
【发布时间】:2012-04-01 20:23:43
【问题描述】:

我希望将数组的 int 值传递给“幕后”的字符串数组的索引。我希望字符串数组与它们的字符串一起输出,但是我想对字符串表示的索引进行数学运算。

换句话说,我想将它们组合或混合在一起,以便我有 4 个数组:其中 2 个是 int 数组,1 个 int 数组用于进行数学运算;其中2个是字符串数组,它们都只是为了显示到屏幕上。

如果我尝试遍历 int 数组并将字符串数组元素分配给它们相应的索引,它将无法编译,并且我收到错误消息: "不能在赋值中将 'std::string' 转换为 'int'。"

如果我尝试遍历字符串数组并将 int 数组值分配给它们对应的索引,它会编译,但是我得到的是 int 值的 ASCII 表示,而不是数字。 下面是遍历 int 数组的代码:

#include <iostream> 

using namespace std;

int main()          
{   

int typeArray[4] = {55,66,77,88};
int valArray[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};

string types[4] = {"Manny", "Moe", "Jack", "John" };
string values[13] =    {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten",
                      "Eleven","Twelve","Thirteen"};

for (int i = 0; i < sizeof(typeArray)/sizeof(int); i++)
  {
    for (int j = 0; j < sizeof(valArray)/sizeof(int); j++)
    {

        typeArray[i] = types[0];
        valArray[j] = values[0];
        }
  }

  system("Pause");
  return 0; 
}

再次,它无法编译,并且我收到上面提到的错误消息。 下面是遍历字符串数组和输出的代码:

#include <iostream> 

using namespace std;

int main()          
{   

int typeArray[4] = {55,66,77,88};
int valArray[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};

string types[4] = {"Manny", "Moe", "Jack", "John" };
string values[13] = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten",
                      "Eleven","Twelve","Thirteen"};

    for (int i = 0; i < sizeof(types)/sizeof(int); i++)
     {
    for (int j = 0; j < sizeof(values)/sizeof(int); j++)
      {

        types[i] = typeArray[0];
        values[j] = valArray[0];

        cout << "This is types array: " << types[i] << "  This is values array: " << values[j] << endl;
      }
   }

  system("Pause");
  return 0;

}

这是显示整数的 ASCII 转换的输出:

这是类型数组:7 这是值数组:☺

请指教,谢谢!

【问题讨论】:

  • 你想用typeArray[i] = types[0];实现什么? typeArray 是一个整数数组,types[0] 是一个字符串。
  • 嗨,弗拉德,我希望“types[0]”数组显示“Manny”,但实际上有一个值为 -55-的“typeArray[0]”。
  • ...或相反...?...."typeArray[0]" 可以保持其值 -55-,但是,它会以字符串 " 输出到屏幕曼尼”。
  • 只需删除所有分配并打印出值。

标签: c++ arrays


【解决方案1】:

问题是您不能将String 存储在int 中,但是您可以从int 创建String,这就是第二个选项编译的原因。

但是,当您这样做时,您会得到 ASCII 值等于 int 的字符。因此,在您的情况下,您将获得 7 的 ASCII 字符,这是您正在打印的字符。

如果您想打印7,您需要获取7 的ASCII 码,您可以这样做:

types[i] = typeArray[0] + '0';

但我不认为这是你真正想要做的。

您可以创建一个包含intString 的结构以将它们保持在一起,然后创建一个包含struct 的数组。

typedef struct typeStruct {
     int value;
     string disp;
} typeStruct;

typeStruct 类型[13];

编辑:根据您对此答案的评论,我认为您想要这个

string values[6] = {"INVALID", "one", "two", "three", "four", "five"};
int size = 6;   
...   

//This prints the value for a given int
void printValue(int val) {
     cout << values[val] << endl;
}

//This gets the int val for a given string
int getValue(string str) {
   for(int i = 0; i < size; i++) {
        if(str.compare(values[i]) == 0) {
              return i;
        }
   }
   return -1;
}

【讨论】:

  • 这类似于一副纸牌的制作方式。当用户看到“Ace”、“Jack”等......程序看到“1”和“10”。
  • @codechick 我想我明白你想要什么并发布了类似的内容。
  • 谢谢你的想法,它确实可以输出到屏幕上。但是,我有点不清楚如何“检查”每个元素中的实际 int 值......?
  • @codechick 如果您像我在getValue 中所做的那样循环遍历数组并返回匹配字符串的索引,您将获得与该字符串关联的 int 值。
  • 吐温,我刚刚添加了你的“getValue”函数,我得到了错误:“没有匹配的函数调用 strcmp(std::string&, std::string&),候选人是:int strcmp (常量字符*,常量字符*)。” ....................我确实包括了 .
【解决方案2】:

看来你应该使用

 Map<int, string>

它将帮助您将整数值绑定到字符串。 无论如何,你会得到一个错误,因为你试图将字符串分配给 int。

【讨论】:

  • 我同意地图更符合逻辑。但是,我正朝着使用我以前见过的矢量制作卡片组的方向前进。一张牌如何在屏幕上显示为“A”,但程序却认为它是“-1-”?
  • 如果我理解正确,在这种情况下,您应该指定两个向量:一个用于整数值,另一个用于字符串值。在这种情况下,可以通过相同的向量索引来绑定它们。
  • 您好被拒绝,谢谢您的建议。我实际上已经有一个二维整数向量,它由加载到其中的 2 个整数数组组成。但是,如果我做同样的事情并创建一个字符串和 2 个字符串数组的二维向量并将它们加载到字符串向量中,我如何通过相同的向量索引绑定它们?我应该先发布我的代码吗?
  • 例如,您有两个索引 22 和 33 以及两个字符串“one”和“two”。并且您想将 22 绑定到“一”,将 33 绑定到“二”。所以你创建了一个向量 ints[2] = {22, 33} 和 strings[2] ={"one", "two"}。因此,您可以创建一个 for 循环,对于索引 i = 0,您将获得 ints[i]==22 和 strings[i]=="one"。你看?这有点像虚拟绑定。但是对于每个定义的 i,您都有一个与 ints[i] 值关联的 strings[i] 值。
  • 这听起来正是我想要做的。让我把它编码,我将再次用标题重新发布:两个二维向量,1 个整数和 1 个字符串,由索引绑定。”再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 2017-12-09
  • 1970-01-01
相关资源
最近更新 更多