Colección de programación en lenguaje C 134
En el proceso de procesamiento de cadenas, a menudo analizamos las cadenas e interceptamos los datos que necesitamos de una larga cadena de cadenas. Si utilizamos nuestras propias funciones escritas a mano para analizar, es posible, pero una vez que conozca la función sscanf, no es necesario que escriba el análisis de la función usted mismo.
Utilizar estas funciones es muy sencillo. En resumen, quedará claro la próxima vez que lo utilices. Como dice el refrán, una buena memoria no es tan buena como una mala escritura.
El código fuente a continuación es el archivo fuente de mi prueba, con comentarios.
1./****************************************** ************
2.** Nombre: sscanf.c
3.** Autor: gzshun
4.**Versión: 1.0
5.**Fecha: 2011-12
6.**Descripción: función sscanf
7.*** ************************************************** * */
8.# incluir & ltstdio.h & gt
9.# incluir & ltstdlib.h & gt
10.# incluir & ltstring . h & gt
11.
12. estático sscanf _ test(void);
13.
14. void sscanf_test(void)
15.{
16.int ret
17.char * cadena
18.int número;
19.char buf 1[255];
20.char buf 2[255];
21.char buf 3[255]; p >
22.char buf 4[255];
23.
24./*1 El uso más simple*/
25. string = "Beijing, China 123";
26.ret = sscanf(string, "%s %s %d", buf1, buf2, & amp número);
27 printf("1.string=%s\n ", cadena);
28.printf("1.ret=%d, buf1=%s, buf2=%s, digit=%d. \ n\n ", ret, buf1, buf2, digit);
29./*
30.**Resultados de la implementación:
31.* * 1.ret=2, buf 1 = China, buf2 = Beijing, dígito=123
32.** Se puede ver que el valor de retorno de sscanf es el número de parámetros leídos.
33.*/
34.
35./*2 Obtiene una cadena de longitud especificada*/
36. cadena = " 123456789 ";
37.sscanf(cadena, " %5s ", buf 1);
38.printf("2.string=%s\n ", cadena);
39.printf("2.buf1=%s\n\n ", buf 1);
40./*
41 .**Resultados de la implementación:
42.**2.buf1=12345
43.*/
44.
45 ./*3.String hasta el carácter especificado*/
46.string = " 123/456 ";
47.sscanf(string, "%[^ /"), buf 1);
48.printf("3.string=%s\n ", cadena);
49.printf("3.buf1=% s\n\ n ",buf 1);
50./*
51.**Resultado de la implementación:
52.**3.buf1 =123 p>
53.*/
54.
55./*4. Cadena hasta el conjunto de caracteres especificado*/
56.string = " 123 ABC ABC ";
57.sscanf(cadena, "%[^A-Z"), buf 1);
58.printf("4 .string=%s\ n ", cadena);
59.printf("4.buf1=%s\n\n ", buf 1);
60./ *
61.**Resultados de la implementación:
62.**4.buf1=123abc
63.*/
64 .
65./*5. Obtiene una cadena que contiene solo el conjunto de caracteres especificado*/
66.string = " 0123 ABC ABC ";
67.sscanf(string, " %[0-9]%[a-z]%[A-Z]", buf1, buf2, buf 3);
68.printf("5.string=%s\ n ", string);
69.printf("5.buf1=%s, buf2=%s, buf3=%s\n\n ", buf1, buf2, buf 3);
p>70./*
71.**Resultados de la implementación:
72.**5.buf1=123
73.*/
74.
75./*6. Obtiene la cadena entre los caracteres especificados*/
76.string = "ios & ltAndroid & gtwp7"; p>77.sscanf(string, "%*[^<]<%[^>]", buf 1);
78.printf("6. string=%s\n ", cadena);
79.printf("6.buf1=%s\n\n ", buf 1);
80./*
81.**Resultados de la implementación:
82.**6.buf1=android
83.*/
84. >85./*7.Especifique la cadena que se omitirá*/
86.string = " iosVSandroid
87.sscanf(string, " % [a-z]VS%[a-z ]", buf1, buf 2);
88.printf("7.string=%s\n ",string);
89.printf("7.buf1=%s,buf2=%s\n\n ",buf1,buf 2);
90./*
91.**Resultados de la implementación:
92.**7.buf1=ios, buf2=android p>
p>
93.*/
94.
95./*8.Cadena dividida*/
96.cadena = " Android -iphone-wp7 ";
97./*
98.* *La cadena pasa por '-', seguida del delimitador '-'.
99.** juega un papel filtrante, algo similar al punto 7.
100.*/
101.sscanf(cadena, "%[^-]-%[^-]-%[^-"), buf1, buf2, buf 3 );
102.printf("8.string=%s\n ",string);
103.printf("8.buf1=%s,buf2=%s , buf3=%s\n\n ", buf1, buf2, buf 3);
104./*
105.**Resultados de la implementación:
106.**8.buf1=android,buf2=iphone,buf3=wp7
107.*/
108.
109./* 9 Extraer dirección de correo electrónico */
110.string = "Email:Beijing @ Sina . com . cn "; [^@]@%[^.].%s", buf1, buf2, buf3, buf 4);
112.printf("9.string=%s\n ", string);
113.printf("9.buf1=%s,buf2=%s,buf3=%s,buf4=%s\n\n ",buf1,buf2,buf3,buf 4 );
114./*
115.** Resultados de la implementación:
116.* * 9. buf 1 = buzón, buf2 = Beijing, buf3 = Sina, buf4=com.cn
117.*/
118.}
119.
120.int main( int argc, char **argv)
121.{
122.sscanf_test();
123.
124 .Return 0;
125.}
126.
127./*
128.**Programa de prueba
129 .**Entorno:
130.* * Linux Ubuntu 2 6 32-24-generic-PAE # 39-Ubuntu SMP miércoles 28 de julio 07:39:26 UTC 2065 438 +00 i686 GNU/. Linux
131.**gcc versión 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
132.**
133. ~/c/sscanf $ gcc sscanf .
/sscanf
135.1.string=Pekín, China
136.1.ret=3, buf 1=China, buf2=Pekín, dígito=123
137.
138.2 .cadena = 123456789
139.2 .buf 1 = 12345
140.
141.3 . p >
142.3 . buf 1 = 123
143.
144.4 . cadena = 123 ABC ABC
145.4 . p >
146.
147.5 . cadena = 0123 ABC ABC
148.5 . buf 1 = 0123, buf2=abc, buf3=ABC
149.
150.6 . cadena = IOs <android & gtwp7
151.6 . = iovsandroid
154.7.buf1=ios,buf2=android
155.
156.8 cadena = Android-iphone-wp7
. 157.8.buf1=android,buf2=iphone,buf3=wp7
158.
159.9.string=Correo electrónico:beijing@sina.com.cn
160.9 buf 1 = buzón, buf2 = Beijing, buf3 = Sina, buf4 = com.cn
161.*/
Este artículo proviene del texto original del sitio web de Linux Commune (. www.linuxidc.com) Enlace:/Linux/2011-12/49711.htm.