【问题标题】:C++ error invalid conversion from 'char' to 'const char*'C++ 错误从 \'char\' 到 \'const char*\' 的无效转换
【发布时间】:2022-11-13 14:28:32
【问题描述】:
#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main(){
    
    char S[10007];

    scanf("%[^\n]", S); getchar();
    
    int i = 0;
    char u;
    while(S[i]){
        u = toupper(S[i]);
        if(strcmp(u, "I") == 0){
            u = '1';
        } 
        else if(strcmp(u, "R") == 0){
            u = '2';
        }
        else if(strcmp(u, "E") == 0){
            u = '3';
        }
        else if(strcmp(u, "A") == 0){
            u = '4';
        }
        else if(strcmp(u, "S") == 0){
            u = '5';
        } 
        else if(strcmp(u, "G") == 0){
            u = '6';
        } 
        else if(strcmp(u, "T") == 0){
            u = '7';
        } 
        else if(strcmp(u, "B") == 0){
            u = '8';
        } 
        else if(strcmp(u, "P") == 0){
            u = '9';
        } 
        else if(strcmp(u, "O") == 0){
            u = '0';
        } 
        printf("%s", u);
        i++;
    }
    

    return 0;
}

我遇到了一种情况,我需要将输入的字符串设为大写,然后将一些大写字母更改为以下数字(示例输入:im waterswell,otuput:1M W4T325W33L)所以我创建了程序,但它返回以下错误:从 'char' 到 'const char*' [-fpermissive] 的无效转换。谁能帮我?谢谢你

【问题讨论】:

  • 你确定你在写 C++ 吗? C++ 具有 std::string (具有各种功能)。而不是所有那些 if/then/else 您可以使用 std::map<char,char> (或 std::unordered_map<char,char> 进行查找。
  • 要比较字符,请使用 == 和字符文字,例如if (u == 'O')。对于打印字符,没有printf 格式说明符,因此您可以创建一个字符数组以用作以空字符结尾的字符串:char str[2] { u, '\0' }; printf("%s", str);,但您可能只需修改 inpur 数组并一次性打印所有内容。 ..
  • 这应该被标记为一个 C 问题,因为它没有什么特别的 C++。

标签: c++ string ctype cstdio


【解决方案1】:

您从什么来源学习 C++? 这更像是我对 C++ 的期望:

#include <string>
#include <iostream>
#include <unordered_map>

static std::unordered_map<char, char> mapping
{
    {'I','1'}, {'i','1'},
    {'R','2'}, {'r','2'},
    {'E','3'}, {'e','3'},
    {'A','4'}, {'a','4'},
    {'S','5'}, {'s','5'},
    {'G','6'}, {'g','6'},
    {'T','7'}, {'t','7'},
    {'B','8'}, {'b','8'},
    {'O','9'}, {'o','9'},
    {'U','0'}, {'u','0'},
};

int main()
{
    //std::string input;
    //std::cin >> input;

    std::string input{ "STORT" };
    for (const char c : input)
    {
        std::cout << mapping[c];
    }

    return 0;
}

【讨论】:

    【解决方案2】:

    strcmp 用于比较字符串,而不是单个字符。只需使用 if (u == 'I') 并在您拥有 strcmp 的任何地方使用它(注意引号更改 - 我们需要一个字符,而不是字符串文字)。

    另外,printf("%s", u); 是错误的,你需要%c 来打印char

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      相关资源
      最近更新 更多