字符串保留前导数字中间和尾部数字删除,不能使用strlen函数,用C语言写
时间: 2024-09-14 21:14:02 浏览: 17
在C语言中,要保留字符串中的前导数字、中间数字和尾部数字,同时删除其他非数字字符,可以使用循环遍历字符串,并根据字符是否为数字来进行相应操作。下面是一个简单的实现示例:
```c
#include <stdio.h>
// 检查字符是否为数字
int is_digit(char ch) {
return ch >= '0' && ch <= '9';
}
// 保留字符串中的前导数字、中间数字和尾部数字,删除其他字符
void retain_digits(char *str) {
int write_index = 0; // 写入位置的索引
int found_digit = 0; // 是否找到数字
// 遍历字符串,保留数字
for (int i = 0; str[i] != '\0'; i++) {
if (is_digit(str[i])) {
if (!found_digit) {
// 如果是第一个找到的数字,从字符串开始位置保留
write_index = i;
found_digit = 1;
}
// 将数字写入保留位置,并更新写入位置
str[write_index++] = str[i];
}
}
// 在保留数字的字符串末尾添加字符串结束符 '\0'
if (found_digit) {
str[write_index] = '\0';
} else {
// 如果没有找到任何数字,则字符串为空,应设置为空字符串
str[0] = '\0';
}
}
int main() {
char test_str[] = "a123b456c789";
printf("Original string: %s\n", test_str);
retain_digits(test_str);
printf("String after retaining digits: %s\n", test_str);
return 0;
}
```
上面的程序定义了一个`retain_digits`函数,它通过遍历字符串并使用`write_index`来标记下一个应该写入数字的位置。`found_digit`变量用于记录是否已经找到数字,以便于确定是否需要从字符串的开头开始保留数字。`is_digit`函数用于检查给定字符是否为数字。
这段代码执行后,会输出如下结果:
```
Original string: a123b456c789
String after retaining digits: 123456789
```