sscanf en lenguaje C

sscanf es similar a scanf , ambos se usan para entrada, excepto que el último usa el teclado ( stdin ) como fuente de entrada y el primero usa una cadena fija como fuente de entrada. Se puede extraer mediante un análisis de cadenas complejo, como el análisis de cadenas cjson.

El segundo parámetro puede ser uno o más {%[*] [ ancho ] [{h | I | I64 | L}]tipo | ' ' | '\t' | '\n' | no-% símbolo}

Nota:

1. * también se puede usar en formatos (es decir, %*d y %*s). Agregar un asterisco  (*) significa omitir estos datos y no leerlos. (Es decir, no leer estos datos en el parámetro)

2. {a|b|c} significa elegir uno de a, b, c, [d] significa que puede tener d o no.

3. El ancho representa el ancho de lectura.

4. {h | l | I64 | L}: tamaño del parámetro, generalmente h representa el tamaño de un solo byte, I representa el tamaño de 2 bytes, L representa el tamaño de 4 bytes (doble excepción), l64 representa el tamaño de 8 bytes.

5. tipo: hay muchos, como %s, %d, etc.

6. Especial: %*[ancho] [{h | l | I64 | L}]tipo significa que aquellos que cumplan esta condición se filtrarán y no se escribirá ningún valor en el parámetro de destino.

Devuelve 0 en caso de error; de lo contrario, devuelve el número de parámetros formateados.

7. Si la cadena leída no está separada por espacios, puede usar %[].

1. Uso general

1

2

3

char buf[512] = ;

sscanf("123456 ""%s", buf);

printf("%s\n", buf);

El resultado es: 123456

2. Obtenga una cadena de longitud especificada. Como en el siguiente ejemplo, tome una cadena con una longitud máxima de 4 bytes.

1

2

sscanf("123456 ""%4s", buf);

printf("[%s]\n", buf);

El resultado es: [1234]

3. Obtenga la cadena hasta el carácter especificado. Como en el siguiente ejemplo, obtenga la cadena hasta que encuentre un espacio.

1

2

sscanf("123456 abcdedf""%[^ ]", buf);

printf("%s\n", buf);

El resultado es: 123456

4. Obtenga una cadena que contenga solo el juego de caracteres especificado . Como en el siguiente ejemplo, tome una cadena que contenga solo del 1 al 9 y letras minúsculas .

1

2

sscanf("123456abcdedfBCDEF""%[1-9a-z]", buf);

printf("%s\n", buf);

El resultado es: 123456abcdedf

5. Obtenga la cadena hasta el juego de caracteres especificado. Como en el siguiente ejemplo, obtenga la cadena hasta que encuentre una letra mayúscula .

1

2

sscanf("123456abcdedfBCDEF""%[^A-Z]", buf);

printf("%s\n", buf);

El resultado es: 123456abcdedf

6. Dada una cadena iios/12DDWDFF@122, obtenga la cadena entre / y @, primero filtre "iios/" y luego envíe la cadena que no sea '@' a buf.

1

2

sscanf("iios/12DDWDFF@122""%*[^/]/%[^@]", buf);

printf("%s\n", buf);

El resultado es: 12DDWDFF

7. Dada una cadena "hola, mundo", solo se conserva "mundo" . (Nota: hay un espacio después de ","")

1

2

sscanf("hello, world""%*s%s", buf);

printf("%s\n", buf);

El resultado es: mundo   PD  %*s significa que el primer %s coincidente se filtra, es decir, hola, se filtra. Si no hay espacios, el resultado es NULL.

8. Otras expresiones regulares

En este experimento usaremos expresiones regulares. La az entre paréntesis es una expresión regular que puede representar cualquier carácter de la a a la z.

Reponer:

Uso de %[]: %[] significa leer un conjunto de caracteres. Si el primer carácter después de [ es "^", significa el significado opuesto.

                    La cadena dentro de [ ] puede estar compuesta por 1 o más caracteres. Un juego de caracteres vacío (%[]) es ilegal y puede

                    conduciendo a resultados impredecibles. %[^] también va en contra de las reglas.

%[az] lee la cadena entre az y se detiene si no está antes, como por ejemplo

             char s[]=”hola, amigo mío”; // Nota: la coma está entre az y az

             sscanf( s, “%[az]”, cadena); // cadena=hola

%[^az] lee una cadena que no está entre az y se detiene si encuentra un carácter entre az, como

             char s[]=”HELLOkitty”; // Nota: la coma está entre az y az

             sscanf( s, “%[^az]”, cadena); // cadena=HOLA

%*[^=] con un signo * delante significa que la variable no se guarda. Saltar cadenas coincidentes.

             char s[]=”bloc de notas=1.0.0.1001″;

      char szfilename [32] = “”;

      int i = sscanf( s, “%*[^=]”, szfilename ); // szfilename=NULL, porque no se guardó

int i = sscanf( s, “%*[^=]=%s”, szfilename); // szfilename=1.0.0.1001

%[^=] lee la cadena hasta que encuentra el signo '=", se pueden agregar más caracteres después de '^'

4) Extraer números de una cadena:

ent a, b, c;

sscanf(“2006:03:18”, “%d:%d:%d”, &a, &b, &c); //a = 2006 b = 3 c = 18

5、
    char *str = "escribe subtítulo:789";
    número entero;
    sscanf(cadena, "subtítulo: %lf", &número);
    printf("número:%f\n",número);

Supongo que te gusta

Origin blog.csdn.net/poject/article/details/128576209
Recomendado
Clasificación