Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 内存问题,将字符串转换为字符并获取此;从';字符*';至';char'&引用;_C++ - Fatal编程技术网

C++ 内存问题,将字符串转换为字符并获取此;从';字符*';至';char'&引用;

C++ 内存问题,将字符串转换为字符并获取此;从';字符*';至';char'&引用;,c++,C++,我有一个作业,其中保存内存非常重要。我做过这个功能(真的不是我,而是我几天前做的一个问题中的一个家伙) 但我不想使用字符串,因为它们占用大量内存,所以我想使用字符,我修改了如下代码 char getMorse( char character) { // if character is a space, a long space if (character == ' ') { return ' '; } // otherwis

我有一个作业,其中保存内存非常重要。我做过这个功能(真的不是我,而是我几天前做的一个问题中的一个家伙)

但我不想使用字符串,因为它们占用大量内存,所以我想使用字符,我修改了如下代码

  char getMorse( char character) {
      // if character is a space, a long space
      if (character == ' ') {
          return ' ';
      }
      // otherwise, character is in range [A, Z], return morse for character
     static char morse_code[27][5]={
          ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---",
          "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-",
          "..-", "...-", ".--", "-..-", "--.."
      };
      // remember to add a space to seperate the character
      return morse_code[character - 'A'] ;
  }
我得到了这个错误

错误:从“char*”到“char”[-fpermissive]的转换无效

   return morse_code[character - 'A'] ;
当我调用函数时,我想做的事情是
auto-morse=getMorse(字符)+''此代码

char morse_code[27][5]
morse\u code
定义为
char
元素的二维数组。或者(可能是更精确的定义)一个数组,其元素是由5个
char
元素组成的数组

如果使用类似于
morse\u code[…]
的代码获取二维数组中的一个元素,它将是一个
char
的5元素数组。在C++中,任何数组都可以转换为指向其第一个元素的指针,在这种情况下,代码< char *> <代码>。因此,
getMorse
函数的正确返回类型是
char*
,而不是
char
。请注意,
char*
是C(有时也是C++)用于字符串的类型

另一个正确的返回类型可能是
char[5]
,但使用该类型的语法太混乱,因此大多数人使用
char*

顺便说一句,您还可以返回
const char*
,以防止错误使用返回值



如果你想节省内存,你应该用位来表示你的莫尔斯电码:保留一个字节,其值只能是
-
太浪费了。

莫尔斯电码数组包含
常量字符*
元素,而不是
字符。
字符
是单个字符。为什么不使用
std::string
?“。因为它们占用大量内存”这是从哪里得到的?
std::string
包含字符以及跟踪其大小所需的内容。无论是谁告诉你它使用了“大量内存”,他们都不知道他们在谈论什么是
String
?”。论坛中的一个家伙“请提供到原始帖子的链接。”。(也不是论坛)我如何用比特表示我的摩尔斯电码?你的意思是什么?如果你“不想使用字符串,因为它们占用了很多内存”,你可以多走一步,想知道什么比你的解决方案占用的内存更少。下一步是,用一位表示每个莫尔斯电码符号。这有点毫无意义,因为您的代码表已经非常小了,即使您使用
std::string
。但这可能是一种有趣的运动;我们甚至有一个专用的“保存一个字节,其值只能是
-
太浪费了。”——实际上,有三个相关的值:
'-'
'.
,和
'\0'
(最后一个是因为字符串长度不同)。原理是合理的,但是,你仍然可以用一个字节来表示每个字母的莫尔斯电码(每个符号两位或者用半个字节来表示长度)。
char morse_code[27][5]