假设我开发了一个函数,给定一个char *,返回一个新的char (它不应该与这个给定的字符共享内存),并转换lowerCase tu UpperCase,反之亦然。我知道我应该在迭代完函数('palabra')给出的char *之后添加一个'\0‘(在新的char *上,称为'retorno')字符。我得到的输出是垃圾;当前输出的示例:
Prueba Invertir Case de palabra 1 -> ERROR salida incorrecta
Parametros de entrada:
Se esperaba:
Se recibio: Э§§§§нннcЙtp
----------------------------------------------
Prueba Invertir Case de palabra 2 -> ERROR salida incorrecta
Parametros de entrada: hola
Se esperaba: HOLA
Se recibio: ЭЭЭЭЭ§§§§
----------------------------------------------
Prueba Invertir Case de palabra 3 -> ERROR salida incorrecta
Parametros de entrada: Write in C
Se esperaba: wRITE IN c
Se recibio: ЭЭЭЭЭЭЭЭЭЭЭ§§§§这是我的代码,问题是,我如何将\0字符添加到"retorno"?这是我面临的唯一问题吗?
char* invertirCase(char* palabra)
{
char* retorno = new char[largo(palabra)+1];
int i = 0;
while (palabra[i] != '\0') {
if (palabra[i]>= 'A' && (palabra[i] )<= 'Z') {
palabra[i] += 32;
}
if (palabra[i] >= 'a' && palabra[i] <= 'z') {
palabra[i] -= 32;
}
i++;
}
retorno [i] = '\0';
return retorno;
}我完全设计了解决方案,现在它起作用了!如果有人提出改进建议,那将是非常受欢迎的!
int i = 0;
char c;
do
{
c = palabra[i];
if( c >= 'A' && c <= 'Z' )
c += 'a' - 'A';
else if( c >= 'a' && c <= 'z' )
c -= 'a' - 'A';
retorno[i] = c;
i++;
} while( c != '\0');`发布于 2020-04-01 02:47:02
有效的解决方案是: char* invertirCase(char* palabra) { //Retorno un nuevo string con case Invertido y considerando el '\0‘。
char* retorno = new char[largo(palabra)+1];
int i = 0;
char c;
do
{
c = palabra[i];
if (c >= 'A' && c <= 'Z')
c += 'a' - 'A';
else if (c >= 'a' && c <= 'z')
c -= 'a' - 'A';
retorno[i] = c;
i++;
} while (c != '\0');
return retorno;}
发布于 2020-04-01 02:42:51
他证实了这一点。我的功能是'largo (palabra)‘演算的经度,而不是服务的符号:
char* invertirCase(char* palabra)
{
char* retorno = new char[largo(palabra)+1];
int i = 0;
while (palabra[i] != '\0') {
if (palabra[i]>= 'A' && (palabra[i] )<= 'Z') {
retorno [i]=palabra[i] + 32;
}
else if (palabra[i] >= 'a' && palabra[i] <= 'z') {
retorno [i]= palabra[i] - 32;
}
else
retorno [i]= palabra[i] ;
i++;
}
return retorno;
}https://stackoverflow.com/questions/60955116
复制相似问题