Estoy tratando de verificar si una cadena contiene una subcadena en C como:
char *sent = "this is my sample example";
char *word = "sample";
if (/* sentence contains word */) {
/* .. */
}
¿Qué es algo para usar en lugar de string::find
en C ++?
strchr
.Respuestas:
Tenga en cuenta que
strstr
devuelve un puntero al comienzo de la palabrasent
siword
se encuentra la palabra .fuente
strstr
devuelve un puntero; Me gusta ser explícito cuando pruebo los punteros.false
es0
strcasestr
hace lo mismo pero ignora el caso.strstr
en glibc aquí: github.com/lattera/glibc/blob/master/string/strstr.c . Está mucho más optimizado que una implementación ingenua, y probablemente más rápido que una función sencilla y autodefinida. Sin embargo, en caso de duda, referencia.Úselo
strstr
para esto.http://www.cplusplus.com/reference/clibrary/cstring/strstr/
Entonces, lo escribirías como ...
fuente
Intenta usar punteros ...
fuente
Puede probar este para encontrar la presencia de la subcadena y para extraerlo e imprimirlo:
fuente
if(strcmp((ret=strstr(mainstring,substring)),substring))
es incorrecta: solo coincidesubstring
si es un sufijo demainstring
. El resto de la función es una forma complicada de escribirprintf("and the sub string is:::%s\n", substring);
.Este código implementa la lógica de cómo funciona la búsqueda (una de las formas) sin usar ninguna función preparada:
fuente
Y aquí está cómo informar la posición del primer carácter fuera de la subcadena encontrada:
Reemplace esta línea en el código anterior:
con:
fuente
Mi propia solución humilde (distingue entre mayúsculas y minúsculas):
Resultados
Probado en ATmega328P (avr8-gnu-toolchain-3.5.4.1709);)
fuente
Lo mismo se logrará con este código más simple: ¿Por qué usar estos:
Pero la parte difícil sería informar en qué posición en la cadena original comienza la subcadena ...
fuente
fuente
Creo que tengo la respuesta más simple. No necesita la biblioteca string.h en este programa, ni la biblioteca stdbool.h. Simplemente usando punteros y aritmética de punteros lo ayudará a convertirse en un mejor programador de C.
Simplemente devuelva 0 para False (no se encontró subcadena), o 1 para True (sí, se encuentra una subcadena "sub" dentro de la cadena general "str"):
fuente
char a[3] = "asd"; char b[2] = "as"; is_substr(a, b);
cadenas de entrada no tienen terminación NUL, por lo que se desborda la matriz.char a[4] = "asd"; char b[3]= "as"; is_substr(a+4, b);
strnstr()
existe (al menos en libbsd)Usando C - No hay funciones integradas
string_contains () realiza todo el trabajo pesado y devuelve 1 índice basado. El resto son códigos de conductor y ayudante.
Asigne un puntero a la cadena principal y a la subcadena, incremente el puntero de la subcadena cuando coincida, detenga el bucle cuando el puntero de la subcadena sea igual a la longitud de la subcadena.
read_line (): un pequeño código de bonificación para leer la entrada del usuario sin predefinir el tamaño de la entrada que debe proporcionar el usuario.
fuente
fuente