C语言中截取字符串数字的多种方法详解
创作时间:
作者:
@小白创作中心
C语言中截取字符串数字的多种方法详解
引用
1
来源
1.
https://docs.pingcode.com/baike/1105662
在C语言编程中,有时我们需要从字符串中提取数字。本文将介绍几种常见的方法,包括使用C语言的字符串处理函数、正则表达式库以及手动遍历字符串等。通过具体的代码示例,帮助读者掌握这些方法的实现原理和应用场景。
一、使用C语言的字符串处理函数
C语言提供了一系列字符串处理函数,如strtok
、strchr
、strstr
等,这些函数可以帮助我们方便地处理字符串。在截取字符串中的数字时,这些函数可以派上用场。
1. 使用strtok
函数
strtok
函数用于将字符串分割成子串。我们可以利用这个函数,结合字符数组和循环,来提取字符串中的数字。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void extract_numbers(const char *str) {
char temp[100];
strcpy(temp, str);
char *token = strtok(temp, " ");
while (token != NULL) {
if (isdigit(token[0])) {
printf("%s\n", token);
}
token = strtok(NULL, " ");
}
}
int main() {
const char *str = "The price is 100 dollars and 50 cents";
extract_numbers(str);
return 0;
}
在这个例子中,我们将字符串按空格分割,然后检查每个子串的第一个字符是否为数字,如果是,则打印出来。
2. 使用strchr
函数
strchr
函数用于查找字符串中第一次出现的指定字符,我们可以用它来找到数字并提取。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void extract_numbers(const char *str) {
while (*str) {
if (isdigit(*str)) {
putchar(*str);
}
str++;
}
putchar('\n');
}
int main() {
const char *str = "The price is 100 dollars and 50 cents";
extract_numbers(str);
return 0;
}
在这个例子中,我们遍历字符串并打印出所有的数字字符。
二、使用正则表达式库
C标准库中并没有直接支持正则表达式的函数,但我们可以使用POSIX正则表达式库来处理字符串。
1. 使用POSIX正则表达式库
POSIX提供了regex.h
库,我们可以使用它来匹配和提取字符串中的数字。
#include <stdio.h>
#include <regex.h>
void extract_numbers(const char *str) {
regex_t regex;
regmatch_t pmatch[1];
const char *pattern = "[0-9]+";
int ret;
ret = regcomp(®ex, pattern, REG_EXTENDED);
if (ret) {
printf("Could not compile regex\n");
return;
}
while (!regexec(®ex, str, 1, pmatch, 0)) {
for (int i = pmatch[0].rm_so; i < pmatch[0].rm_eo; i++) {
putchar(str[i]);
}
putchar('\n');
str += pmatch[0].rm_eo;
}
regfree(®ex);
}
int main() {
const char *str = "The price is 100 dollars and 50 cents";
extract_numbers(str);
return 0;
}
在这个例子中,我们使用正则表达式匹配字符串中的数字,并打印出来。
三、手动遍历字符串
手动遍历字符串是最直接的方法,通过遍历每个字符来检查它是否是数字,然后提取出来。
1. 基本的手动遍历
#include <stdio.h>
#include <ctype.h>
void extract_numbers(const char *str) {
while (*str) {
if (isdigit(*str)) {
putchar(*str);
}
str++;
}
putchar('\n');
}
int main() {
const char *str = "The price is 100 dollars and 50 cents";
extract_numbers(str);
return 0;
}
在这个例子中,我们遍历字符串并打印出所有的数字字符。
2. 处理多位数字
有时候,我们需要提取完整的多位数字,而不是单个字符。
#include <stdio.h>
#include <ctype.h>
void extract_numbers(const char *str) {
while (*str) {
if (isdigit(*str)) {
while (isdigit(*str)) {
putchar(*str);
str++;
}
putchar('\n');
} else {
str++;
}
}
}
int main() {
const char *str = "The price is 100 dollars and 50 cents";
extract_numbers(str);
return 0;
}
在这个例子中,我们不仅提取单个数字字符,还能提取多位数字。
四、使用更复杂的数据结构和算法
在实际应用中,特别是在处理复杂的字符串时,我们可能需要使用更复杂的数据结构和算法来确保代码的高效性和健壮性。
1. 使用动态数组
动态数组可以帮助我们存储和处理提取出来的数字。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void extract_numbers(const char *str) {
char *numbers = malloc(strlen(str) + 1);
int index = 0;
while (*str) {
if (isdigit(*str)) {
numbers[index++] = *str;
}
str++;
}
numbers[index] = '\0';
printf("%s\n", numbers);
free(numbers);
}
int main() {
const char *str = "The price is 100 dollars and 50 cents";
extract_numbers(str);
return 0;
}
在这个例子中,我们使用动态数组来存储提取出的数字,并在最后打印出来。这种方法可以处理任意长度的数字串,具有更好的灵活性和扩展性。
热门推荐
走近李安,理解李安
如何处理阳台窗户的漏水问题并寻找有效的解决方?这种解决方如何确保长期效果?
一文读懂甲流:症状、传播与预防全攻略
硅的性质及分类
猫咪乱尿屡教不改!到底是为什么?
扬子江网文评论中心发布年度报告:番茄小说“巅峰榜”引领网文新风格新圈层
镀金和纯金存在哪些差异?这些差异有怎样的市场影响?
垄断竞争和寡头垄断有哪些区别
小儿鼻塞怎么解决
吃荠菜的危害有哪些
高考地理答题技巧总结:选择题、简答题和综合题全方位解析
新西兰国旗解说:寓意内涵与历史渊源
猪场租赁合同标准格式及注意事项
复盘2008年金融危机:危机之后的功能性“超纲”政策
2008年全球金融危机发生的原因是什么?
铁线莲小苗如何快速养大?做好这几点,一年爬满墙!
代表爱情的植物:15种植物你知道几个?
2025情人节送花指南:十款热门花束的花语、朵数与颜色禁忌
师傅带进企?校园到职场他们“无缝衔接”!
col在编程中代表什么
提神醒脑:选择这些茶饮让您全天保持精神
钳工:在智能制造的浪潮中,如何成为制造业的“不倒翁”
头痛欲裂?这份国际偏头痛急救指南请收好!
头痛、呕吐的病因是什么
线上可刷医保统筹账户!“全国第一枪”已经打响
如何在手机上进行C语言编程
“九锡”到底是什么,历史上有哪些名人受过“九锡”
产业观察 | 低空经济产业现状发展分析
低空经济应用场景与典型案例统计(2024年三季度)
房贷部分提前还款如何减少月供