【问题标题】:Char and Int in one ArrayChar 和 Int 在一个数组中
【发布时间】:2011-12-24 00:12:19
【问题描述】:

我想在一个数组中包含字符和整数。我想要做的是在我的数组中有 1 到 9,并且用户选择用字母 X 替换哪个数字。我该怎么做呢?我假设我不能将字符传递到一个名为 int array[8]; 的数组中那么有没有办法在一个数组中同时包含整数和字符?

【问题讨论】:

  • 几乎可以肯定有更好的方法来做你想做的事,虽然我真的不知道它是什么,因为我不能真正理解你想做什么。
  • 我想要一个数字 1 到 9 的数组。当我选择用字母 X 替换哪个数组时,我想替换 1 到 9。基本上我怎样才能替换一个数组在某些位置带有字母的整数。我假设我不能把 Chars 放到一个有 Ints 的地方
  • 有一个单独的变量来记录用户选择的索引,然后在应用程序的相关位置使用它不是更有意义吗?您有什么理由决定将这些信息存储在一个地方?

标签: c++ c arrays char int


【解决方案1】:

在 c++ 中,ints 和 chars 几乎是一回事。它们都存储为数字,只是分辨率不同。

int array[2];
array[0] = 100;
array[1] = 'c';

printf("%d", array[0]) //Prints the number at index zero.

//Is it %c to print a char?
printf("%c", array[1]) //Prints the number at index zero as it's equivalent char.

【讨论】:

  • 投到char 是没有意义的;由于printf 是一个可变参数函数,它将被提升回int
  • 我有一个在 char 数组中添加 1 到 9 的 forloop,但是当我打印它时,我得到的图像很少,而不是数字
  • 放弃强制转换,可变参数函数不接收小于int的整数类型
  • @Oli 和 Ben,演员表走了。 Mystycs - 这是因为数字 1 到 9 不代表可打印字符。尝试存储数字 65+ 作为示例
  • @mystycs:这些是对应于数字 1...9 的字符。与字符 '1'...'9' 对应的数字不是 1...9,在 ASCII 系统上它们应该是 0x31 (49) ... 0x39 (5​​7)。您经常会发现自己添加或减去“0”以在数值和字符值之间进行转换。
【解决方案2】:

为什么不直接使用字符数组?

你可以的

char characters[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 0}; // last one is NULL terminator

int replace = 1;
cout << "Enter the number you want to replace with X: ";
cin >> replace;

assert(replace > 0 && replace < 10); // or otherwise check validity of input

characters[replace - 1] = 'X';

// print the string
cout << characters;

// if the user entered 5, it would print
// 1234X6789

【讨论】:

    【解决方案3】:

    因为用户模型和编程模型之间有很大的区别,所以在黑暗中刺伤。

    当用户在指定索引处“插入”一个字符时,您希望更新一个 char 数组,而不是在您的 int 数组中插入值。保持 2 并排。

    【讨论】:

      【解决方案4】:

      正如其他人所提到的,当您为 int[] 数组的元素分配 char 值时,char 将被提升为 int。当您从该数组中读取数据时,您必须使用显式强制转换。

      即,以下工作

      int a[10];
      char c='X';
      
      a[0] = c;
      c = (char) a[0];
      

      然而,

      因为您需要跟踪哪些元素包含 int 以及哪些包含 chars - 这不是一个有吸引力的解决方案。

      另一种选择是只有一个 char 数组并将数字 0..9 存储为字符。即,'0','1',..'9'。

      (第三种选择只是让另一个变量将索引存储到“X”元素 - 但这与您的建议大不相同)

      【讨论】:

        【解决方案5】:

        您可以将数字视为字符

            char mychar[10];
            for ( int i = 0; i < 10; ++i )
            {
                mychar[i] = '0' + i;
            }
        
        
            //Assume you read it 
            int userInput = 9;
            mychar[userInput-1] = 'X';
        

        【讨论】:

          【解决方案6】:

          假设您的数组没有任何负数,最简单的解决方案是使用 -1 而不是 X。我以前做过。

          【讨论】:

            猜你喜欢
            • 2013-02-26
            • 1970-01-01
            • 1970-01-01
            • 2020-08-12
            • 2015-03-01
            • 2012-08-21
            • 2021-04-03
            • 2014-09-10
            • 1970-01-01
            相关资源
            最近更新 更多