首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开发toLower/toUppercase函数

开发toLower/toUppercase函数
EN

Stack Overflow用户
提问于 2020-04-01 00:16:10
回答 2查看 68关注 0票数 0

假设我开发了一个函数,给定一个char *,返回一个新的char (它不应该与这个给定的字符共享内存),并转换lowerCase tu UpperCase,反之亦然。我知道我应该在迭代完函数('palabra')给出的char *之后添加一个'\0‘(在新的char *上,称为'retorno')字符。我得到的输出是垃圾;当前输出的示例:

代码语言:javascript
复制
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"?这是我面临的唯一问题吗?

代码语言:javascript
复制
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;

}

我完全设计了解决方案,现在它起作用了!如果有人提出改进建议,那将是非常受欢迎的!

代码语言:javascript
复制
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');`
EN

回答 2

Stack Overflow用户

发布于 2020-04-01 02:47:02

有效的解决方案是: char* invertirCase(char* palabra) { //Retorno un nuevo string con case Invertido y considerando el '\0‘。

代码语言:javascript
复制
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;

}

票数 0
EN

Stack Overflow用户

发布于 2020-04-01 02:42:51

他证实了这一点。我的功能是'largo (palabra)‘演算的经度,而不是服务的符号:

代码语言:javascript
复制
        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;

       }
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60955116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档