Si tengo:

#include <stdio.h>

int main(int argc, char *argv[]) {
    int length = strlen(argv[1]);

Y argv [1] uno es solo una palabra, por ejemplo, "hola", ¿cómo puedo indexarlo al revés e imprimir letra por letra?

Intenté usar strrev, pero aparentemente esto no está en Linux y, en lugar de incluir la función, prefiero recorrer argv [1] hacia atrás.

Lo intenté:

int i;  
for (i = length; i == 0; i--){

    printf("%c", argv[1][i]);
}

Pero sabía que esto estaría mal incluso antes de ejecutarlo.

-3
Austin 26 ene. 2016 a las 04:03

3 respuestas

La mejor respuesta

¿Cómo puedo indexarlo al revés e imprimir letra por letra?

int i;  
for (i = strlen( argv[1] ) - 1 ; i >= 0; i--){
    printf("%c", argv[1][i]);
}

Además, por supuesto, necesita #include <string.h> para funciones relacionadas con cadenas como strlen.

3
artm 26 ene. 2016 a las 01:56

La función strlen devolverá el número de caracteres en la matriz / cadena, sin embargo, el último elemento no será el valor devuelto sino length = strlen(argv[1]) - 1

También creo que con tu bucle for quisiste decir:

for (i = length; i >= 0; i--){ //Note the change of i==0 to i >= 0
1
Sanjay Charran 26 ene. 2016 a las 01:30

Si bien la respuesta aceptada es algo aceptable, no debe dejarse así.

#include <stdio.h>

int main(int argc, char *argv[]) {
    int length = strlen(argv[1]);

Esto es incorrecto en 3 cuentas:

  1. no verifique si hay argv [1] en primer lugar, preferiblemente arreglado asegurándose de que argc == 2
  2. Se utiliza strlen, pero no se incluye string.h. ¿Está seguro de que está compilando con las advertencias habilitadas?
  3. Un comentario un tanto estilístico pero importante es que si va a utilizar argv más de una vez (y lo está haciendo), la cadena debe almacenarse en algún lugar. en general, no desea confiar en argv ni argc después de la etapa inicial de análisis de argumentos
1
employee of the month 26 ene. 2016 a las 01:30