Autor
|
Tema: {Solucionado} [C] Detectar tres mayúsculas seguidas (Leído 5,183 veces)
|
alvr
Desconectado
Mensajes: 6
|
Hola, tengo que hacer un programa en el que se escriba la frase y detecte si hay tres mayusculas consecutivas mediante una función. Aquí dejo el enunciado. Se introduce por teclado un texto que acaba en un punto. Escribir un programa que nos indique si existen tres letras mayúsculas consecutivas en el texto. Para resolver el problema realizar una función EsMayusc que a partir de un carácter nos devuelva un 1 si el carácter es alfabético mayúscula y devuelva un 0 en cualquier otro caso. No deberán leerse más datos que los necesarios. Y aquí dejo el código que tengo hasta ahora, pero que claramente no funciona: #include <stdio.h>
int esMayus(char c);
void main() { char letra;
printf("Escribe una secuencia de texto: "); scanf("%c", &letra); while(letra != '.') { if(esMayus(letra) == 1) { scanf("%c", &letra); if(esMayus(letra) == 1) { scanf("%c", &letra); if(esMayus(letra) == 1) { printf("Encontrado."); } } } scanf("%c", &letra); } }
int esMayus(char c) { if(c >= 'A' && c <= 'Z') return 1; else return 0; }
|
|
« Última modificación: 4 Enero 2013, 10:18 am por alvr »
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
Hola alvr , tu tienes que introducir un texto no letra a letra por lo tanto el:
No puede ser , ya que estás leyendo una sola letra.Además tienes que declarar un array de carácteres para albergar un texto no una sola letra, así que así no es: char letra;
Debería de ser así: char frase[20];/** El 20 lo puedes cambiar por la cantidad de carácteres que quieras **/
Entonces ahora para leer la frase que vas a introducir terminada en un punto debes usar el especificador de formato '%s'(sin las comillas) así:
Pero esta función solo lee palabras. Así que tendrás que lidiar con esta(mejor dicho con la segura):
Aunque esta función no es muy segura ( echale un vistazo a |Lo que no hay que hacer en C/C++. Nivel basico| ) Esta función se sustituye por fgets:
Una vez tienes la frase leída e introducida en el array de carácteres trabajas con punteros o con el índice dentro de los corchetes y vas comprobando. En tu programa el problema principal es que solo lees letras no una frase.La función de comprobar si es mayúscula está bien. Si necesitas más ayuda aquí estamos.
|
|
« Última modificación: 3 Enero 2013, 20:20 pm por avesudra »
|
En línea
|
Regístrate en
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Hola, tengo que hacer un programa en el que se escriba la frase y detecte si hay tres mayusculas consecutivas mediante una función. Citándote: Y aquí dejo el código que tengo hasta ahora, pero que claramente SÍ funciona:#include <stdio.h> int esMayus(char c); void main() { char letra; int cont=0; printf("Escribe una secuencia de texto terminada en punto: "); scanf("%c", &letra); while(letra != '.') { if(esMayus(letra) == 1) cont++; scanf("%c", &letra); } (cont==3)? puts ("Encontrado"):puts ("No encontrado"); return 0; } int esMayus(char c) { if(c >= 'A' && c <= 'Z') return 1; else return 0; }
Saluditos!. ......... P.D: avesudra el uso de char no implica que debas estar dándole al enter cada vez, pruébalo y lo veras..
|
|
« Última modificación: 3 Enero 2013, 21:37 pm por leosansan »
|
En línea
|
|
|
|
alvr
Desconectado
Mensajes: 6
|
Gracias por la ayuda leosansan pero necesito que compruebe que hay tres mayúsculas seguidas, y por el código que has enviado cuenta las mayúsculas que hay incluso estando separadas.
|
|
|
En línea
|
|
|
|
durasno
Desconectado
Mensajes: 373
|
Solo es cuestion que hagas algunas modificaciones nada mas, el codigo base te lo hicieron(tampoco pidas todo)
Saludos
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Gracias por la ayuda leosansan pero necesito que compruebe que hay tres mayúsculas seguidas, y por el código que has enviado cuenta las mayúsculas que hay incluso estando separadas.
Comprueba si funciona ahora: #include <stdio.h> int esMayus(char c); int main() { char letra; int cont=0; printf("Escribe una secuencia de texto: "); scanf("%c", &letra); while(letra != '.') { if(esMayus(letra) == 1) { scanf("%c", &letra); if(esMayus(letra) == 1) { scanf("%c", &letra); if(esMayus(letra) == 1) { scanf("%c", &letra); if(esMayus(letra) ==0) cont++; } } } scanf("%c", &letra); } if ((cont>=1)) printf ("Encontrado %d veces",cont); else puts ("No encontrado"); return 0; } int esMayus(char c) { if(c >= 'A' && c <= 'Z') return 1; else return 0; }
Saluditos!. .........
|
|
|
En línea
|
|
|
|
alvr
Desconectado
Mensajes: 6
|
leosansan, no pide lo mismo, pero gracias de todas formas. Al final he empezado de nuevo y parece que funciona bien. Aquí dejo el código por si alguno le resulta útil en un futuro. #include <stdio.h> int esMayus(char c);
void main() { char letra; int l1, l2, l3, enc = 0; printf("Escribe una secuencia de texto: "); scanf("%c", &letra); while(letra != '.' && enc == 0) {
if(esMayus(letra) == 1) { l1 = 1; scanf("%c", &letra); if(esMayus(letra) == 1) { l2 = 1; scanf("%c", &letra); if(esMayus(letra) == 1 && l2 == 1) { l3 = 1; scanf("%c", &letra); enc = 1; } } } else { scanf("%c", &letra); }
} if(l1 == l2 && l2 == l3) printf("Tres mayusculas consecutivas."); else printf("No hay tres mayusculas consecutivas.");
} int esMayus(char c) { if(c >= 'A' && c <= 'Z') return 1; else return 0; }
|
|
|
En línea
|
|
|
|
durasno
Desconectado
Mensajes: 373
|
Creo q no hace falta tantos scanf para la lectura, solo reseteando la variable cont a cero cuando no hay 3 consecutivos alcanzaria; algo asi: while(letra != '.') { if(esMayus(letra) == 1) { cont++; if(cont==3) consecutivo++; } else cont=0; } (consecutivo !=0)? printf ("Consecutivos: %d veces\n",consecutivo ):puts ("No encontrado");
Saludos PD: lo creo q no considera es si se ingresan mas de 3 mayusculas consecutivas
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
zonahurbana
Desconectado
Mensajes: 178
RS, JC.
|
Una forma de hacerlo en C++: #include <iostream> using namespace std; int esMayus(char c){ if(c>='A' && c<='Z') return 1; else return 0; } int main() { string frase; do{ cout<<"Ingrese frase terminada en punto: "; cin>>frase; }while(frase.size()<3 || frase.find('.')==-1); for(size_t i=0; i<frase.find('.')-2; ++i) if(esMayus(frase[i]) && esMayus(frase[i+1]) && esMayus(frase[i+2])) { cout<<"Existen 3 mayusculas seguidas en el texto."; return 0; } cout<<"No existen 3 mayusculas seguidas en el texto."; return 0; }
|
|
« Última modificación: 4 Enero 2013, 04:42 am por zonahurbana »
|
En línea
|
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[AYUDA][SOLUCIONADO] Richtextbox no acepta mayusculas
Programación Visual Basic
|
coku
|
2
|
3,322
|
7 Diciembre 2007, 10:48 am
por coku
|
|
|
[Batch] Problema con Script para detectar USB. [Solucionado =)]
Scripting
|
FranciskoAsdf
|
5
|
13,535
|
21 Febrero 2009, 00:40 am
por FranciskoAsdf
|
|
|
[Batch] Detectar Java [Solucionado]
Scripting
|
D71
|
4
|
4,862
|
7 Mayo 2010, 23:04 pm
por leogtz
|
|
|
[SOLUCIONADO]¿cómo detectar cuando se cierra un JInternalFrame?
Java
|
kinos
|
3
|
8,902
|
2 Junio 2010, 01:13 am
por kinos
|
|
|
[Solucionado] Detectar posicion del click en imagen?
« 1 2 »
Programación Visual Basic
|
Cromatico
|
14
|
6,735
|
8 Diciembre 2010, 00:35 am
por Psyke1
|
|