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;
}