c语音 从字符串中取指定格式字符串
时间: 2024-12-10 12:11:02 浏览: 25
在C语言中,从字符串中提取指定格式的子字符串可以通过多种方法实现。以下是几种常见的方法:
1. **使用`sscanf`函数**:
`sscanf`函数可以从字符串中按照指定格式读取数据。
```c
#include <stdio.h>
int main() {
char str[] = "Hello, World! 123";
char word[20];
int number;
sscanf(str, "%s %*[^0-9] %d", word, &number);
printf("Word: %s\n", word);
printf("Number: %d\n", number);
return 0;
}
```
2. **使用`strtok`函数**:
`strtok`函数用于分割字符串,可以根据指定的分隔符提取子字符串。
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World! 123";
const char delim[] = " ,!";
char *token;
token = strtok(str, delim);
while (token != NULL) {
printf("Token: %s\n", token);
token = strtok(NULL, delim);
}
return 0;
}
```
3. **使用`sscanf`结合正则表达式**:
虽然C语言本身不直接支持正则表达式,但可以使用POSIX正则表达式库。
```c
#include <stdio.h>
#include <regex.h>
int main() {
char str[] = "Hello, World! 123";
regex_t regex;
regmatch_t matches[2];
if (regcomp(®ex, "Hello, ([A-Za-z]+)! ([0-9]+)", REG_EXTENDED)) {
fprintf(stderr, "Could not compile regex\n");
return 1;
}
if (!regexec(®ex, str, 3, matches, 0)) {
char word[20];
char number[10];
int start = matches[1].rm_so;
int end = matches[1].rm_eo;
strncpy(word, str + start, end - start);
word[end - start] = '\0';
start = matches[2].rm_so;
end = matches[2].rm_eo;
strncpy(number, str + start, end - start);
number[end - start] = '\0';
printf("Word: %s\n", word);
printf("Number: %s\n", number);
} else {
printf("No match\n");
}
regfree(®ex);
return 0;
}
```
这些方法各有优缺点,选择哪种方法取决于具体的需求和字符串的格式。
阅读全文
相关推荐


















