Posición en el abecedario [Batch]

Iniciado por leogtz, 12 Abril 2009, 01:54 AM

0 Miembros y 1 Visitante están viendo este tema.

leogtz

Pedir una cadena al usuario, y de cada caracter de la cadena indicar que posición ocupa en el abecedario :

Cadena : Leonardo
L = 12
e = 5
o = 15
n = 14
a = 1
r = 18
d = 4
o = 15
Press any key...

Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
:code
set /p "cadena=Cadena : "
if not defined cadena (goto:code)
set "abecedario=abcdefghijklmnopqrtsuvwxyz"
set /a "longitud=0"
set "cadena2=%cadena%"
set /a "contador=1"
:bucle
if not defined cadena (goto:next)
set "cadena=%cadena:~1%"
set /a "longitud+=1"
goto:bucle
:next
set /a "longitud-=1"
for /l %%$ in (0,1,%longitud%) do (
call :etiqueta !cadena2:~%%$,1!
)
goto:eof
:etiqueta
set /a "contador=1"
set "caracter=%1"
for /l %%_ in (0,1,25) do (
if /i ["!abecedario:~%%_,1!"]==["%caracter%"] (call:view !caracter! !contador!)
set /a contador+=1
)
goto:eof
:view
echo %1 = %2
goto:eof
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

DarkItachi

El mismo ejercicio en C++:

Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
char abecedario[25];
int pos_abc(char letra,char abc[]=abecedario);
int main()
{
    char cadena[50];
    int i=0;
    for (char b='a';b<='z';b++)
    {
        abecedario[i]=b;
        i++;
    }
    cout<<"Introduzca palabra: ";
    cin>>cadena;
    cout<<endl;
    for (int f=0;f<strlen(cadena);f++)
    {
        cout<<cadena[f]<<" = "<<pos_abc(cadena[f])<<endl;
    }
    cout<<endl;
    system("pause");
}
int pos_abc(char letra,char abc[])
{
    for (int i=0;i<strlen(abc);i++) //recorre la cadena
    {
        if (letra==abc[i]) { return i+1; } //Devuelve posicion
    }
    return -1; //Si llega a esta parte, es decir, la letra no esta
               //en el abecedario devolvera -1
}


La función también acepta abecedarios personalizados.
Come to me when you have these eyes...

By more that you try it, a feather never will achieve to fly.

leogtz

#2
Aqui pongo la solución en C:
#include <stdio.h>
signed int busqueda(char caracter);
int main(void)
{
    char cadena[200];
    printf("Cadena : ");
    scanf("%199[^\n]", cadena);
    for(signed int i = 0; cadena[i] != '\0'; i++)
    printf("%c = %d\n", cadena[i], busqueda(cadena[i]));
    return 0;
}
signed int busqueda(char caracter)
{
    char abecedario[] = "abcdefghijklmnopqrstuvwxyz";
    for(signed int i = 0; abecedario[i] != '\0'; i++)
    if(caracter == abecedario[i])
    return i+1;
}

Salida:

C:\>dudas
Cadena : Guitarra
G = 16
u = 21
i = 9
t = 20
a = 1
r = 18
r = 18
a = 1

C:\>
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Eliptico

¡¡¡Buenas!!!

Aqui va uno que tambien reconoce mayusculas.


#include <stdio.h>
#include <stdlib.h>

#define MAX_CAD 50

int main (int argc,char* argv[])
{
    char cad[MAX_CAD],i;

    printf("Introduce una cadena: ");
    fgets(cad,MAX_CAD,stdin);

    for(i=0; cad[i]!='\n' ; i++)
    {
        if(cad[i]>='a' && cad[i]<='z')
            printf("%c = %d\n", cad[i], cad[i] - 'a' + 1);
        else if(cad[i]>='A' && cad[i]<='Z')
            printf("%c = %d\n", cad[i], cad[i] - 'A' + 1);
        else if(cad[i]==' ')
            printf("ESPACIO\n");
        else
            printf("caracter no reconocido.\n");
    }

    system("PAUSE");

    return 0;
}


¡¡¡Un saludo!!!

leogtz

#4
Este también reconoce mayusculas :
#include <stdio.h>
#include <ctype.h>
signed int busqueda(char caracter);
int main(void)
{
   char cadena[200];
   printf("Cadena : ");
   scanf("%199[^\n]", cadena);
   for(signed int i = 0; cadena[i] != '\0'; i++)
   printf("%c = %d\n", cadena[i], busqueda(cadena[i]));
   return 0;
}
signed int busqueda(char caracter)
{
   char abecedario[] = "abcdefghijklmnopqrstuvwxyz";
   for(signed int i = 0; abecedario[i] != '\0'; i++)
   if(tolower(caracter) == abecedario[i])
   return i+1;
}


Salida:

C:\>codes
Cadena : LaGuitarra
L = 12
a = 1
G = 7
u = 21
i = 9
t = 20
a = 1
r = 18
r = 18
a = 1

C:\>


Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Eliptico

Pues si, y queda mas claro.

¡¡¡Un saludo!!!