我正在尝试手动反转案例,我尝试了这个:
char* invertirCase(char* str){
int size = 0;
char* iterador = str;
char* retorno = str;
while (*iterador != '\0') {
if (retorno[size] < 96) {
retorno[size] = *iterador + 32;
}
else {
retorno[size] = *iterador - 32;
}
iterador++;
size++;
}
return retorno;
}
我试图找出错误在哪里,但我不明白,因为我对 C++ 语言还很陌生。
为什么在 C++ 中出现“禁止将字符串常量转换为 'char*'”?
错误消息意味着您正在尝试将字符串文字传递给函数。
C++ 中的字符串文字具有按值传递给函数的常量字符数组类型,它们被隐式转换为 type const char *
。任何更改字符串文字的尝试都会导致未定义的行为。
您可以将由字符串文字初始化的字符数组传递给函数,例如
char s[] = "Hello";
std::cout << invertirCase( s ) << '\n';
反过来,该功能可以通过以下方式定义
#include <cctype>
char * invertirCase( char *str )
{
for ( char *p = str; *p; ++p )
{
unsigned char c = *p;
if ( std::isalpha( c ) )
{
if ( std::islower( c ) )
{
*p = std::toupper( c );
}
else
{
*p = std::tolower( c );
}
}
}
return str;
}
要么
char * invertirCase( char *str )
{
for ( char *p = str; *p; ++p )
{
unsigned char c = *p;
if ( std::islower( c ) )
{
*p = std::toupper( c );
}
else if ( std::isupper( c ) )
{
*p = std::tolower( c );
}
}
return str;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句