C/Visual C - Posición de un caracter en una cadena

 
Vista:
sin imagen de perfil

Posición de un caracter en una cadena

Publicado por fdas (5 intervenciones) el 31/12/2017 12:57:41
Buenas, estaba haciendo un programa para buscar la posición de un elemento en una cadena de caracteres, básicamente tienes que introducir una cadena de caracteres y el elemento a buscar y el te devuelve la posición del elemento.
El programa funciona bien salvo cuando voy a buscar el elemento que está en la primera posición, a que se debe? Aquí dejo el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
    char mensaje[100], buscar;
    int i=1, indicador=0;
 
    printf("Escriba una cadena de caracteres: ");
    gets(mensaje);
 
    printf("Introduzca el elemento a buscar: ");
    scanf("%s", &buscar);
 
    while((indicador==0)||(i<strlen(mensaje)))
    {
        if(mensaje[i]==buscar)
            indicador=1;
        else
            i=i+1;
    }
 
    if (indicador==1)
        printf("El caracter esta en la posicion %d", i+1);
    else
        printf("No se ha encontrado el caracter");
 
    return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Posición de un caracter en una cadena

Publicado por Tom (619 intervenciones) el 31/12/2017 15:44:24
El primer elemento de un array es el 0, no el 1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Posición de un caracter en una cadena

Publicado por fdas (5 intervenciones) el 31/12/2017 17:30:24
Cierto, ya lo he cambiado poniendo 0 en lugar de 1 y me sigue dando error, lo que pasa que si mi cadena fuese por ejemplo: "Hola, que tal?"
Y pido que me busque la letra H directamente el programa deja de funcionar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Posición de un caracter en una cadena

Publicado por Yamil Bracho (4 intervenciones) el 31/12/2017 18:18:58
El problema es que la comparacion que estan haciendo es de un string contra un char, en

if(mensaje[i]==buscar)

mensaje[i] es un char mientras que buscar es un string. Si estas buscando unaletra tendrias qye usar

if(mensaje[i]==buscar[0])

Si vas a comparar string lo haces con strcmp
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Posición de un caracter en una cadena

Publicado por fdas (5 intervenciones) el 31/12/2017 18:27:39
Buenas, corrígeme si digo algo erróneo pero buscar no es un vector, si no me equivoco no tiene sentido lo de buscar[0]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 60
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Posición de un caracter en una cadena

Publicado por Yamil Bracho (26 intervenciones) el 31/12/2017 19:28:23
En C los string son arreglos de char...
De hecho son un area de memoria delimitado por null o '\0'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Posición de un caracter en una cadena

Publicado por fdas (5 intervenciones) el 31/12/2017 20:19:04
Al poner buscar[0] me saca el siguiente error:
suscripted value is neither array nor pointer nor vector.

Si te fijas yo buscar no lo declaré ni como una cadena de caracteres ni como un vector ni nada, voy a hacerlo y lo pruebo.

Modifico, al declararlo como un vector me sigue funcionando bien salvo cuando busco la primera letra que me da posiciones muy elevadas y sin ningún sentido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Posición de un caracter en una cadena

Publicado por Chema (234 intervenciones) el 01/01/2018 16:31:54
Vectores y arreglos, ¿Qué tipo de estructura son ? .

suscripted value is neither array nor pointer nor vector.

El mensaje define claramente el error que cometes,

Tira el código que has escrito , y aclárate las ideas,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Posición de un caracter en una cadena

Publicado por fdas (5 intervenciones) el 01/01/2018 16:50:08
Supongo que irá como respuesta a mi último mensaje, si lo dices por eso te diré que era como respuesta a lo que dijo Yamil Bracho, igualmente a mi me parecía raro pero por probar no perdía nada.

A que se puede deber el error que me da el programa?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Posición de un caracter en una cadena

Publicado por Jesús Flores (1 intervención) el 01/01/2018 17:13:02
El error que yo veo es que declaraste la variable buscar como un arreglo de un caracter. Recuerda que en C, las cadenas de caracteres son arreglos, como lo declaraste en la variable mensaje. Para encontrar el elemento buscar en mensaje, busca en la biblioteca estándard <string.h> no recuerdo cuál función sirve para mostrar el elemento en una cadena.

Suerte

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Posición de un caracter en una cadena

Publicado por Chema (234 intervenciones) el 01/01/2018 17:26:58
Buena broma.

El error escondido está situado en scanf("%s", &buscar);

Este ejemplo funciona y no usa cosas raras como vectores ni arreglos .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int main(void){
	char mensaje[100], buscar[100];
	char *s;
	char *r;
	char *e;
	char *f;
	int find = 0;
 
    printf("Escriba una cadena de caracteres: ");
    gets(mensaje);
    printf("Introduzca el elemento a buscar: ");
    gets(buscar);
    f = buscar;
	s = r = mensaje;
	e = s + strlen(mensaje);
 
	while( r < e){
		if(*f == *r){
			for(; *f && *f == *r;f++,r++)
				;
			if(*f == 0x0)
				find++;
			f = buscar;
		}
		r++;
	}
    printf("%d", find);
 
    return 0;
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Posición de un caracter en una cadena

Publicado por Tom (619 intervenciones) el 03/01/2018 11:39:41
Por si alguien, buscando llegara a este post (lo dudo), para que quede clara la diferencia entre un char y un array de char (y que hay un buffer):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/* */
void skip(char c) {
	while(c != '\n') {
		c = getchar();
	}
}
 
/* */
int main(int argc, char *argv[]) {
	char str[5] = {0}, test = 0;
	size_t i, len;
 
	printf("Frase: ");
	len = strlen(fgets(str, sizeof(str), stdin));
	skip(str[len - 1]);
 
	printf("Carácter: ");
	test = getchar();
	skip(test);
 
	for(i = 0; i < len; i++) {
		if(str[i] == test) {
			printf("Pos de '%c' en \"%s\" es %ld\n", test, str, i);
			break;
		}
	}
	if(i == len) {
		printf("'%c' no encontrado en \"%s\"\n", test, str);
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar