Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Mensaje militar en C#

Estas en el tema de Mensaje militar en C# en el foro de .NET en Foros del Web. Hola a todos, sigo pasando ejercicios a c# pero me da error al pasar un ejercicio que decodifica mensajes militares y es el siguiente: Cita: ...
  #1 (permalink)  
Antiguo 15/11/2018, 20:46
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Mensaje militar en C#

Hola a todos, sigo pasando ejercicios a c# pero me da error al pasar un ejercicio que decodifica mensajes militares y es el siguiente:

Cita:
Unhandled Exception: System.ArgumentOutOfRangeException: Index and length must refer to a location within the strin
g.
Parameter name: length
at System.String.Substring(Int32 startIndex, Int32 length)
at _12_STRING.Program.Main(String[] args) in /home/detectivejd/NetCoreProjects/07_String/12_STRING/Program.cs:li
ne 31
Lo curioso es que en java anda bien y en c# no, acá paso el código:

Código C#:
Ver original
  1. using System;
  2. namespace _12_STRING
  3. {
  4.     class Program {
  5.         /**
  6.          * Código de: https://algoritmosjavafc.blogspot.com/2013/11/manejo-de-cadenas.html
  7.          *
  8.          * 12. Un grupo de inteligencia militar desea codificar los mensajes
  9.          * secretos de tal forma que no puedan ser interpretados con una lectura
  10.          * directa, para lo cual han establecido las siguientes reglas:
  11.           a) Todo mensaje debe estar sus letras en mayúsculas.
  12.           b) Reemplazar cada letra por la que sigue según abecedario, excepto Z
  13.             que se deberá reemplazar con la letra A.
  14.           c) reemplazar cada dígito encontrado por el siguiente numero excepto el
  15.             9 que deberá ser reemplazado por el 0.
  16.         */
  17.         static void Main(string[] args) {
  18.             String mensaje, cod1="", caracter;
  19.             String ABC="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  20.             String numeros="0123456789";
  21.             Console.Clear();
  22.             Console.WriteLine("Ingrese el mensaje: ");
  23.             mensaje= Console.ReadLine();
  24.             mensaje= mensaje.ToUpper();
  25.             for (int i = 0; i < mensaje.Length; i++) {
  26.                 caracter=mensaje.Substring(i,i+1);
  27.                 if(caracter.Equals(" ")){
  28.                     cod1=cod1+caracter;
  29.                 } else {
  30.                     for (int j = 0; j < ABC.Length; j++) {
  31.                         if(caracter.Equals(ABC.Substring(j,j+1))){
  32.                             if(caracter.Equals("Z")){
  33.                                 cod1=cod1+"A";
  34.                                 break;
  35.                             } else {
  36.                                 cod1=cod1+ABC.Substring(j+1,j+2);
  37.                                 break;
  38.                             }
  39.                         }
  40.                     }
  41.                     for (int k = 0; k <numeros.Length; k++) {
  42.                         if(caracter.Equals(numeros.Substring(k,k+1))){
  43.                             if(caracter.Equals("9")){
  44.                                 cod1=cod1+"0";
  45.                                 break;
  46.                             } else {
  47.                                 cod1=cod1+numeros.Substring(k+1,k+2);
  48.                                 break;
  49.                             }
  50.                         }
  51.                     }
  52.                 }          
  53.             }
  54.             Console.WriteLine("\n MENSAJE INGRESADO: "+mensaje);
  55.             Console.WriteLine("\n CÓDIGO RESULTANTE: "+cod1);
  56.         }
  57.     }
  58. }

Espero sus respuestas y saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias
  #2 (permalink)  
Antiguo 16/11/2018, 19:43
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años
Puntos: 120
Respuesta: Mensaje militar en C#

bueno, el error que te da , es por que diste por Hecho que Java y C# hacen lo mismo, con funciones del mismo nombre, y ese es el error, el Substring de Java es Diferente al Substring de c#

con Java, tienes que indicar las posiciones del fragmento de texto
java = "1234".Substring(1,3) == "23";
c# = "1234".Substring(1,3) == "234";
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9
  #3 (permalink)  
Antiguo 16/11/2018, 21:05
Avatar de detective_jd  
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: Mensaje militar en C#

Hola tuadmin gracias por responder, en vista a lo que me dijiste miré en internet esta página y encontré la respuesta a mis problemas:

The Java Substring Function vs. the C# Substring Function

Adapté al código y funcionó, pongo el código por si a alguien le interesa:

Código C#:
Ver original
  1. using System;
  2. namespace _12_STRING
  3. {
  4.     class Program {
  5.         /**
  6.          * Código de: https://algoritmosjavafc.blogspot.com/2013/11/manejo-de-cadenas.html
  7.          *
  8.          * 12. Un grupo de inteligencia militar desea codificar los mensajes
  9.          * secretos de tal forma que no puedan ser interpretados con una lectura
  10.          * directa, para lo cual han establecido las siguientes reglas:
  11.           a) Todo mensaje debe estar sus letras en mayúsculas.
  12.           b) Reemplazar cada letra por la que sigue según abecedario, excepto Z
  13.             que se deberá reemplazar con la letra A.
  14.           c) reemplazar cada dígito encontrado por el siguiente numero excepto el
  15.             9 que deberá ser reemplazado por el 0.
  16.         */
  17.         static void Main(string[] args) {
  18.             String mensaje, cod1="", caracter;
  19.             String ABC="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  20.             String numeros="0123456789";
  21.             Console.Clear();
  22.             Console.WriteLine("Ingrese el mensaje: ");
  23.             mensaje= Console.ReadLine();
  24.             mensaje= mensaje.ToUpper();
  25.             for (int i = 0; i < mensaje.Length; i++) {
  26.                 caracter=mensaje.Substring(i,(i+1) - i);
  27.                 if(caracter.Equals(" ")){
  28.                     cod1=cod1+caracter;
  29.                 } else {
  30.                     for (int j = 0; (j < ABC.Length); j++) {
  31.                         if(caracter.Equals(ABC.Substring(j,(j+1) - j))){
  32.                             if(caracter.Equals("Z")){
  33.                                 cod1=cod1+"A";
  34.                                 break;
  35.                             } else {
  36.                                 cod1=cod1+ABC.Substring((j+1),(j+2) - (j+1));
  37.                                 break;
  38.                             }
  39.                         }
  40.                     }
  41.                     for (int k = 0; k <numeros.Length; k++) {
  42.                         if(caracter.Equals(numeros.Substring(k,(k+1) - k))){
  43.                             if(caracter.Equals("9")){
  44.                                 cod1=cod1+"0";
  45.                                 break;
  46.                             } else {
  47.                                 cod1=cod1+numeros.Substring((k+1),(k+2) - (k+1));
  48.                                 break;
  49.                             }
  50.                         }
  51.                     }
  52.                 }          
  53.             }
  54.             Console.WriteLine("\n MENSAJE INGRESADO: "+mensaje);
  55.             Console.WriteLine("\n CÓDIGO RESULTANTE: "+cod1);
  56.         }
  57.     }
  58. }

Muchas gracias por tu tiempo y respuesta. Saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias

Etiquetas: ios, mensaje, militar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:50.