Sscanf ()

Source: Internet
Author: User

Sscanf usage

Name:
Sscanf ()-read data that matches the specified format from a string.
Function prototype:
Int sscanf (string STR, string FMT, mixed var1, mixed var2 ...);
Int scanf (const char * Format [, argument]...);
Note:
Similar to scanf, sscanf is used for input, but the latter uses the keyboard (stdin) as the input source, and the former uses a fixed string as the input source.
The format can be one or more {% [*] [width] [{H | L | i64 | L}] type | ''| '/T' | '/ n' | non-% sign}
Note:
1. * can also be used in the format. (% * D and % * s) with an asterisk (*) indicates skipping this data and not reading it. (that is, do not read this data into the parameter)
2. {A | B | c} indicates A, B, and C. Select [d], which indicates D or D.
3. width indicates the read width.
4. {H | L | i64 | L}: parameter size. Generally, h indicates a single-byte size, I indicates a 2-byte size, and l indicates a 4-byte size (double exception ), l64 indicates 8-byte size.
5. Type: this is a lot, such as % s and % d.
6. Special: % * [width] [{H | L | i64 | L}] type indicates that values that meet this condition are filtered out and no value is written to the target parameter.
Collection operations are supported:
% [A-Z] indicates matching any character in A to Z, greedy (as many as possible)
% [AB '] matches a, B, and', greedy
% [^ A] matches any character other than a, greedy
[Edit this section]
Example:
1. Common usage.
Char Buf [512] =;
Sscanf ("123456", "% s", Buf );
Printf ("% s/n", Buf );
Result: 123456
2. Take a string of the specified length. In the following example, a string with a maximum length of 4 bytes is obtained.
Sscanf ("123456", "% 4 s", Buf );
Printf ("% s/n", Buf );
Result: 1234
3. Obtain the string of the specified character. For example, in the following example, the string is obtained when a space is encountered.
Sscanf ("123456 abcdedf", "% [^]", Buf );
Printf ("% s/n", Buf );
Result: 123456
4. Take a string that only contains the specified character set. For example, in the following example, take a string that only contains 1 to 9 letters and lowercase letters.
Sscanf ("123456 abcdedfbcdef", "% [1-9a-z]", Buf );
Printf ("% s/n", Buf );
Result: 123456 abcdedf
5. Obtain the string of the specified character set. For example, in the following example, a string with uppercase letters is used.
Sscanf ("123456 abcdedfbcdef", "% [^ A-Z]", Buf );
Printf ("% s/n", Buf );
Result: 123456 abcdedf
6. Specify a string

Iios/12ddwdff @ 122

To obtain the string between/and @, first filter out "iios/", and then
'@'

To the Buf.
Sscanf ("
Iios/12ddwdff @ 122

"," % * [^/]/% [^ @] ", Buf );
Printf ("% s/n", Buf );
Result: 12 ddwdff.
7. Given a string "Hello, world", only world is retained. (Note: There is a space after)
Sscanf ("Hello, world", "% * S % s", Buf );
Printf ("% s/n", Buf );
Result: World
% * S indicates that the first matching % s is filtered out, that is, hello is filtered out.
If there is no space, the result is null.
Sscanf is similar to a regular expression, but does not have a strong regular expression. Therefore, we recommend that you use a regular expression for complex string processing.
//-------------------------------------------------------
Sscanf, indicating formatting input from string
In STR, input a number to X, which is 32700.
A long time ago, I thought c didn't have its own split string function. Later I found sscanf. For a long time, I thought sscanf could only define strings with spaces. Now I found that I was wrong.
Sscanf is a runtime function. Its prototype is simple:
Int sscanf (
Const char * buffer,
Const char * Format [,
Argument]...
);
Its powerful functions are reflected in its support for format.
I used to separate a string like this 2006: 03: 18:
Int A, B, C;
Sscanf ("200:0:18", "% d: % d", A, B, C );
And-2006: 04: 18:
Char sztime1 [16] = "", sztime2 [16] = "";
Sscanf ("2006:0:18-2006:04:18", "% s-% s", sztime1, sztime2 );
But later, I needed to handle
The space on both sides of '-' is canceled, but the % s definition of the string is broken.
I need to re-design a function to handle this situation? This is not complicated, but in order to make all the Code have a uniform style, I need to change many places and replace the existing sscanf with my own split function. I thought I must do this and fell asleep with a strong dissatisfaction with sscanf. I woke up and found that I didn't have.
The format-type has a type field such as %. If the string to be read is not separated by spaces, you can use % [].
% [] Is similar to a regular expression. [A-Z] indicates that all characters of A-Z are read, and [^ A-Z] indicates that all characters except a-Z are read.
That's why the problem was solved:
Sscanf ("2006:0:18-2006:04:18", "% [0-9,:]-% [0-9,:]", sztime1, sztime2 );
Post a question in softmse (Jake)
Http://community.csdn.net/Expert/topic/4843/4843294.xml? Temp =. 4321558.

Zhou Xingxing gave a cool sscanf use case, and then learned to find that sscanf is awesome.
Original problem:
  
Iios/12ddwdff @ 122


How to obtain the string between/and @?
Is there any function in the C program?
Zhou xing's code:
# Include <stdio. h>
Int main ()
{
Const char * s ="
Iios/12ddwdff @ 122

";
Char Buf [20];
Sscanf (S, "% * [^/]/% [^ @]", Buf );
Printf ("% s/n", Buf );
Return 0;
}
Result: 12 ddwdff.
Similar to scanf, sscanf is used for input, but the latter uses the screen (stdin) as the input source, and the former uses a fixed string as the input source.
Function prototype:
Int scanf (const char * Format [, argument]...);
The format can be one or more {% [*] [width] [{H | L | i64 | L}] type | ''| '/T' | '/ n' | non-% sign },
Note: {A | B | c} indicates A, B, and C. Select [d], which indicates D or D.
Width: width, which can be ignored. Its usage is as follows:
Const char sourcestr [] = "Hello, world ";
Char Buf [10] =;
Sscanf (sourcestr, "% 5 s", Buf); // % 5 s, only 5 Characters
Cout <Buf <Endl;
Result: Hello
{H | L | i64 | L}: parameter size. Generally, h indicates the size of a single byte, I indicates the size of 2 bytes, and l indicates the size of 4 bytes (double exception ), l64 indicates 8-byte size.
Type: this is a lot, that is, % s, % d and so on.
Special:
% * [Width] [{H | L | i64 | L}] type indicates that values that meet this condition are filtered out and no value is written to the target parameter. For example:
Const char sourcestr [] = "Hello, world ";
Char Buf [10] =;
Sscanf (sourcestr, "% * S % s", Buf); // % * s indicates that the first matching % s is filtered out, that is, hello is filtered out.
Cout <Buf <Endl;
Result: World
Collection operations are supported:
% [A-Z] indicates matching any character in A to Z, greedy (as many as possible)
% [AB '] matches a, B, and', greedy
% [^ A] matches any character other than a, greedy
Are you familiar with it? Yes, it's very similar to regular expressions, and it still supports filtering, that is, % * [A-Z]. For example:
A review of the example of star brother:
Const char * s ="
Iios/12ddwdff @ 122

";
Char Buf [20];
Sscanf (S, "% * [^/]/% [^ @]", Buf );
Printf ("% s/n", Buf );
Take the string from example 3-to the specified character. For example, in the following example, the string is obtained when a space is encountered.
Sscanf ("123456 abcdedf", "% [^]", Buf );
Printf ("% s/n", Buf );
Result: 123456
Therefore, the code of Zhou Xing should be summarized:
Const char * s ="
Iios/12ddwdff @ 122

";
Char Buf [20];
Sscanf (S, "% * [^/]/% [^ @]", Buf );
Printf ("% s/n", Buf );
First filter out the "iios/" and then the characters
'@'

The following is a string of 12 ddwdff (in Example 3, you can get this string to @ and remove @ 122): 12ddwdff is sent to the Buf. The result is displayed.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.