Invertir una cadena en C utilizando una función

He buscado y leído sólo para los días tratando de resolver este problema.

Simplemente estoy tratando de revertir una cadena en C usando mis propias funciones, pero estoy confundido y no he sido capaz de seguir adelante en 2 días!

Aquí está mi código:

/*
This program takes a string
as input and returns it to
the user but in reverse order.
*/

#include "stdio.h"
#include "stdlib.h"
#define MAXLINE 1000

/* Take in a string and return its length. */
int getline(char s[]); 

/* Copy From to To. */
void copy(char To[], char From[]); 

/* Take the contents of a string and reverse them. */
char * reverse(char s[]);

int main() {

        char mainString[MAXLINE + 1];
        copy(mainString, "Test string.");

    printf("Your string before reversal: %s\n", mainString);
    reverse(mainString);
    printf("Your string after reversal: %s\n", mainString);

    return 0;
}


int getline(char s[]) {
    int i;
    for(i = 0; s[i] != '\0'; i++);
    i++;

    return i;
}

void copy (char To[], char From[]) {
    int i;
    for(i = 0; From[i] != '\0'; i++) {
        To[i] = From[i]; 
    }; 
    To[i] = '\0';
}


char * reverse(char s[]) {

    int string_length;
    string_length = getline(s);

    char myString[MAXLINE];
    int a = 0;

    int i;
    i = string_length;

    while (i >= 0) {
        s[i] = myString[a];
        a++;
        i--;
    };
    copy(s, myString);

    return s;
}
  • Usted necesita aprender la depuración, es una valiosa habilidad para tener.
  • ¿cuál es tu problema exacto ahora? ¿qué hace su programa?
  • Una pregunta similar se le preguntó ayer así por alguien más: stackoverflow.com/questions/16946115/…
  • myString[MAXLINE]; no es \0 terminado
  • debe ser micadena[a] = s[i] usted está tratando de revertir s a la derecha?? y añade un carácter nulo para myString antes de copiar
  • Mi problema parece estar en el reverso(s) de la función.
  • primero de todo, cambiar el nombre de getline para getlength, porque eso es lo que se destina. morevoer, quitar la última i++ en este método, una cadena puede ser de longitud 0.
  • La próxima vez por favor, sea específico sobre el problema: lo que usted espera y lo hizo lugar.

InformationsquelleAutor user2459683 | 2013-06-06

3 Kommentare

  1. 2

    Quitar la i++ al final de la función getline. Esto provocó que el devuelve la longitud de la cadena ser 1 más de lo que debería ser, que a su vez provocó un ‘\0’ para ser el primer carácter de su invierte la cadena, que no debe suceder.

    Por otra parte, la línea de

    s[i] = myString[a];

    está mal. Esto cambia s, pero desea cambiar myString lugar:

    myString[i] = s[a];

    (Alternativamente, puede hacer copia(micadena, s); antes de que el bucle while para llenar myString y, a continuación, copiar los datos desde allí a s en reverso).

  2. 1

    Revisión a

    int getline(char s[]) {
        int i;
        for(i = 0; s[i] != '\0'; i++);
        return i;
    }
    
    char * reverse(char s[]) {
        int string_length;
        string_length = getline(s);
        char myString[MAXLINE];
        int i, a =0;
        i = string_length-1;
        while (i >= 0) {
            myString[a]=s[i];
            a++;
            i--;
        }
        myString[a] ='\0';
        copy(s, myString);
    
        return s;
    }
    • Gracias a todos. Yo lo tengo, especialmente gracias a Bluepixy.
  3. 0

    La inversa de la función de espera para revertir la cadena s pasado en parámetro y myString es local de la cadena con la chatarra personajes

    Por lo que no puede hacer un

    s[i] = micadena[a]

    Que acaba de perder todos los caracteres de s

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea