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]