C++ 错误:从';char';至';常量字符*';

C++ 错误:从';char';至';常量字符*';,c++,char,C++,Char,我正试着把所有的单词都转换成大写字母。以下是标题: #include <string.h> #include <ctype.h> using namespace std; int Mayusculas(char texto) { int liCount; for(liCount=0;liCount<strlen(texto);liCount++) { texto[liCount]=toupper(texto[liCount

我正试着把所有的单词都转换成大写字母。以下是标题:

#include <string.h>
#include <ctype.h>

using namespace std;

int Mayusculas(char texto)
{
    int liCount;
    for(liCount=0;liCount<strlen(texto);liCount++)
    {
        texto[liCount]=toupper(texto[liCount]);
    }
}
这就是我使用它的地方

case 1:
    Mayusculas(Cadena);
    cout<<Cadena<<endl;
案例1:
马尤库拉斯(卡德纳);

cout将代码更改为:因为int可能不适合接收器类型char

int Mayusculas(char *texto)
{
    int liCount;
    for(liCount=0;liCount<strlen(texto);liCount++)
    {
        texto[liCount]= (char) toupper(texto[liCount]);
    }
}
int Mayusculas(char*texto)
{
int liCount;
对于(liCount=0;liCountTL;DR:

细节 因为我们主要讲英语,我会注意到它似乎表示大写字母,是一个系列或链-在本例中是一个C样式的字符串

如图所示-C样式字符串
  • int-Mayusculas(char-texto)
    应该是
    int-Mayusculas(char*texto)
  • 它必须是一个
    char*
    ,因为您使用的是一个C样式的字符串,而不是一个字符。否则,您就没有什么可迭代的了

  • toupper()
    返回一个
    int
    ,因此您应该强制转换,即更改
  • texto[liCount]=toupper(texto[liCount]);

    texto[liCount]=(char)toupper(texto[liCount]);

  • 函数签名表示您正在返回一个
    int
    ,但实际上并没有返回任何内容。因此,要么将其更改为返回void,要么返回一些内容。(
    liCount
    ,可能?)
  • 备选方案:std::string <>但是你把这个问题标记为C++,为什么不使用C风格的字符串呢?它们更安全,更容易处理。

    引用皮埃尔的话:

    #包括

    void Mayusculas(std::string&str)//引用参数
    {
    转换(str.begin(),str.end(),str.begin(),::toupper);
    }
    int main()
    {
    string Cadena=“Hola al-Mundo”;
    马尤库拉斯(卡德纳);
    
    cout首先,您必须传递字符串的地址,因此您必须在函数中使用
    char*
    ,而不是
    char

    void Mayusculas(char *text)
    {
        for(int post = 0; pos < std::strlen(text); pos++)
        {
            text[post] = (char) toupper(text[pos]);
        }
    }
    

    我还写了一个可以执行和测试的示例。

    问题到底是什么?您提到“我被这个错误阻塞了”-错误是什么?“这个错误”?好吧,下次再发。标题@Shapiroyacov error:invalid const char*转换为'char'对不起,我认为标题错误:invalid const char*转换为'char'已经足够明确了@KarolyHorvath.@ANDY实际上已经足够明确了。不过,有人可能会说它也很清楚地告诉你ent错误。同样的错误仍然存在。我不需要更改main()的任何内容?@vishal,你对main()的更改建议都是错误的。
    char*Cadena[100];
    是一个由
    char*
    s组成的数组,而不是
    char
    s。你不需要在
    Mayusculas(Cadena);
    (如果编译器允许的话)
    #include <algorithm>
    #include <string>
    
    std::string str = "Hello World";
    std::transform(str.begin(), str.end(),str.begin(), ::toupper);
    
    #include <algorithm>
    #include <string>
    #include <iostream>
    
    using namespace std;
    
    string Mayusculas(std::string str)
    {
        transform(str.begin(), str.end(), str.begin(), ::toupper);
        return str;
    }
    
    int main()
    {
        string Cadena = "Hola al Mundo";
        cout << Mayusculas(Cadena) << endl;
        return 0;
    }
    
    void Mayusculas(std::string & str) // reference parameter
    {
        transform(str.begin(), str.end(), str.begin(), ::toupper);
    }
    
    int main()
    {
        string Cadena = "Hola al Mundo";
        Mayusculas(Cadena);
        cout << Cadena << endl;
        return 0;
    }
    
    void Mayusculas(char *text)
    {
        for(int post = 0; pos < std::strlen(text); pos++)
        {
            text[post] = (char) toupper(text[pos]);
        }
    }
    
    int main() {
      // ...
      char Cadena[100];
      Mayusculas(Cadena);
    
      std::cout << Cadena << std::endl;
      return 0;
    }