Tengo el codigo de ahi abajo, mi problema es que al ser nombres propios la primera letra va con mayuscula y cuando hago la busqueda por ejemplo con mu no me aparece Muhittin( uno de los nombres ) que es lo que deberia pasar.
Gracias
#include <stdio.h>
#include <string.h>
int main() {
const char *const pnames[200] = aqui aparecen 200 nombres propios;
int i;
for (i = 0; i < 200; i++) {
char primera_letra = pnames
- ;
int longitud_nombre = strlen( pnames );
char ultima_letra = pnames[ longitud_nombre -1 ];
printf("Elemento %i: %s, Primera letra: %c, ultima %c\n", i+1, pnames, primera_letra, ultima_letra );
}
char cadena_busqueda[4];
printf("Introduzca cadena para buscar: ");
scanf("%3s", cadena_busqueda);
for (i = 0; i < 200; i++) {
char* v;
v = strstr(pnames, cadena_busqueda);
if (v != NULL)
printf("Silaba %s encontrada en %s\n", cadena_busqueda, pnames);
}
return 0;
}
Bueno, hay funciones como "toupper(int)" que convierten las letras minúsculas en mayúsculas (y, BTW, tolower(int), convierte mayúsculas a minúsculas).
Fijate cómo utilizarlas para fácilmente modificar tu código!
Saludos :D
No he mirado el código ni nada. Pero por lo que dices, seguro que hay alguna función en string.h que sirva para pasar una cadena de caracteres a minúsculas: estilo lowercase o a mayúsculas como uppercase.
Existe la función:
short stricmp (const unsigned char *s1, const unsigned char *s1);
Que es insensible a may y minus.
Cita de: BatchianoISpyxolo en 7 Noviembre 2012, 22:40 PM
No he mirado el código ni nada. Pero por lo que dices, seguro que hay alguna función en string.h que sirva para pasar una cadena de caracteres a minúsculas: estilo lowercase o a mayúsculas como uppercase.
Existe la función:
short stricmp (const unsigned char *s1, const unsigned char *s1);
Que es insensible a may y minus.
No, en la libreria estandar de C no tienes funciones que manejen cadenas ignorando el caso, y
stricmp no forma parte ni de string.h (http://cplusplus.com/reference/clibrary/cstring/) ni del resto de la libreria estandar de C (http://cplusplus.com/reference/clibrary/).
Como bien ha dicho
Ferno, tienes que utilizar
toupper y
tolower para hacer comparaciones cambiando el caracter a mayusculas o minusculas, o directamente modificar las cadenas con estas funciones para cambiar el caso de los caracteres que las forman.
¡Saludos!
Otra opción es crear una función propia que compare las cadenas sin distinguir mayúsculas de minúsculas. Por ejemplo:
#include <ctype.h>
int stricmp(char const *s, char const *t)
{
while (tolower(*s) == tolower(*t) && *s != '\0'){
s++;
t++;
}
return (tolower(*s) > tolower(*t)) - (tolower(*s) < tolower(*t));
}
Un saludo
The stricmp function is available for C++ programs. It is available for C only when the program defines the __cplusplus__strings__ macro.
:\
Si ese texto lo copiaste de esta pagina (http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/rzan5mst264.htm), cito:
Citarstricmp() - Compare Strings without Case Sensitivity
Format
#include <string.h>
int stricmp(const char *string1, const char *string2);
Note:
The stricmp function is available for C++ programs. It is available for C only when the program defines the __cplusplus__strings__ macro.
Language Level: Extension
En ella se indica claramente que esa función es una
extension y estas no forman parte de las bibliotecas estándar de C y C++ (su disponibilidad depende del compilador).
Un saludo
@rir3760, ya, ya xD
muchas gracias a todos di con la solucion con vuestros consejos!
Buenas, de antemano pedire disculpas ya que aun soy un novicio en esto del C y tengo la sensación de que lo que te voy a decir no te servirá para nada.
Leí que en ascii al tener cada caracter una numeracion independiente, la manera de pasar de minusculas a mayusculas era restandole 32 , y viceversa.
Por ejemplo:
main()
{
int c;
while((c=getchar()) !=EOF)
{
if(c>='a' && c<='z') c-=32;
putchar(c);
}
}
/* Eso debería cambiarte los caracteres que introduzcas y sean minúsculas , exclusivamente las minúsculas, a letras mayúsculas */ Bueno , si no te sirve de nada lo lamento ya que aun no estoy al nivel de la mayoría de lo que por aquí se habla.
¡Un saludo!
Cita de: Jomad205 en 14 Noviembre 2012, 11:18 AMLeí que en ascii al tener cada caracter una numeracion independiente, la manera de pasar de minusculas a mayusculas era restandole 32 , y viceversa.
No se recomienda ya que el lenguaje C no garantiza el juego de caracteres ASCII (solo un subconjunto de el) como tampoco que la diferencia entre las mayúsculas y minúsculas sea de 32. Es el caso usual si pero no esta garantizado.
En su lugar es mejor utilizar isalpha y tolower/toupper (prototipos en <ctype.h>) para conocer si un carácter es alfabético y de ser el caso pasarlo a minúsculas/mayúsculas.
Un saludo