C ++禁止将`string`常量转换为`char *` - 字母到莫尔斯转换程序

时间:2017-02-06 17:54:47

标签: c++

所以我正在进行这项任务,我需要将普通文本转换为摩尔斯电码。我们目前正在研究基本的c ++,因此我不允许使用字符串数据类型或任何其他复杂的内置函数。所以我尝试通过char数组来完成它。当我尝试运行它时,出现以下错误" ISO C ++禁止将字符串常量转换为' char *' "

#include <iostream>
using namespace std;

int len = 0;
char string[45] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '?', '[', '!', '(', ')', '&' };
char* morse[45] = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----.", ".-.-.-", "--..--", "..--..", ".----.", "-.-.--", "-..-.", "-.--.", "-.--.-", ".-..." };

void size(char* arr)
{
    for (int i = 0; arr[i] != 0; i++) {
        len++;
    }
}

int main()
{
    char str[100];
    cout << "Enter string: ";
    cin.getline(str, 100);
    size(str);
    for (int i = 0; i < len; i++) {
        for (int j = 0; j < 45; j++) {
            if (str[i] == string[j]) {
                cout << morse[j];
                break;
            }
        }
    }
    return 0;
}

2 个答案:

答案 0 :(得分:8)

您正在定义一个char*个对象的数组。您使用字符串文字初始化这些指针。但正如错误所解释的那样,不允许将字符串文字(编译器称为常量)转换为char*

解决方案:允许将字符串文字转换为const char*,因此您可以声明const char*数组。您似乎没有修改数组指向的字符串,因此这不应该是一个问题。

PS。您已选择包含标准库头,并已选择使用using namespace std;并定义了与标准库(string)声明的标识符同名的标识符。这很可能是编译器的问题。

解决方案:请勿使用using namespace std

解决方法:提出另一个变量名称而不是string。诀窍是知道标准库声明的所有标识符。由于这个技巧并不简单,并且将在标准的未来版本中添加新的标识符,我建议使用上面的解决方案。

答案 1 :(得分:1)

如错误中所述,问题是"..."例如是一个字符串常量,并且您尝试分配给非常量char*。相反,您应该分配给const char*

const char* morse[45] = { ".-" // ...