c语言提取字符串中左括号‘[’和右括号‘]’之间的数字,封装成函数,例如字符串aa[12]中的12
时间: 2024-10-14 13:14:16 浏览: 24
在C语言中,你可以编写一个函数来解析字符串中'['和']'之间的整数。这个函数可以采用栈数据结构来跟踪开始的 '[' 和遇到的闭合 ']' 的位置。以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#define MAX_STACK_SIZE 100
typedef struct {
int data[MAX_STACK_SIZE];
size_t top;
} Stack;
Stack* create_stack() {
Stack *stack = malloc(sizeof(Stack));
stack->top = -1;
return stack;
}
void push(Stack *stack, int value) {
if (stack->top >= MAX_STACK_SIZE - 1) {
printf("Stack overflow\n");
return;
}
stack->data[++stack->top] = value;
}
int pop(Stack *stack) {
if (stack->top == -1) {
printf("Stack underflow\n");
return -1;
}
return stack->data[stack->top--];
}
bool is_matching_parenthesis(char open, char close) {
return open == '[' && close == ']';
}
int extract_number_in_brackets(const char* str) {
Stack *stack = create_stack();
int num = 0;
bool in_number = false;
for (size_t i = 0; str[i]; ++i) {
if (str[i] == '[') {
push(stack, i);
in_number = true;
} else if (str[i] == ']') {
if (!in_number || !is_matching_parenthesis(stack->data[stack->top], str[i])) {
while (pop(stack) != '[') {}
} else {
break;
}
} else if (in_number && str[i] >= '0' && str[i] <= '9') {
num = num * 10 + (str[i] - '0');
}
}
if (stack->top != -1) {
printf("Invalid bracket pairing at position %d\n", pop(stack));
free(stack);
return -1;
} else {
free(stack);
return num;
}
}
int main() {
const char* str = "aa[12]bb[[34]]cc";
int result = extract_number_in_brackets(str);
if (result != -1)
printf("Extracted number: %d\n", result);
return 0;
}
```
在这个示例中,`extract_number_in_brackets` 函数遍历输入的字符串,当遇到 '[' 时开始存储其位置并进入数字模式,遇到 ']' 时检查是否匹配并退出数字模式。最后返回的是栈顶元素(即最内层括号对应的数字)。如果遇到不正确的括号对,函数会返回 -1。
阅读全文