在devc++中,用一维数组及静态存储实现对顺序串类型进行定义,用malloc函数为空顺序串分配存储空间,建立一个空顺序串,用scanf函数输入一串任意字符串,手动实现字符串的查找
时间: 2024-10-29 22:20:09 浏览: 29
学习二维动态数组指针做矩阵运算的方法
在Dev-C++中,我们可以使用一维字符数组来实现顺序串(也称作字符数组),并使用静态存储来管理内存。首先,我们需要定义一个结构体或简单的类来表示顺序串,并包含用于存储字符串的字符数组和长度信息。这里我们使用C语言风格:
```cpp
#include <stdio.h>
#include <string.h>
// 定义顺序串的结构体
typedef struct {
char* data; // 存储字符串的指针
int length; // 字符串长度
} String;
// 动态分配存储空间
String* createEmptyString() {
String* str = (String*)malloc(sizeof(String));
str->data = NULL;
str->length = 0;
return str;
}
// 输入字符串并初始化
void inputString(String* str) {
str->data = (char*)malloc(100); // 假设最多输入99个字符
if (scanf("%s", str->data) == EOF) { // 使用scanf读取字符串,遇到EOF(如用户输入'\n')结束输入
str->data[0] = '\0'; // 确保字符串结尾有'\0'
str->length = 0; // 设置长度为0
} else {
str->length = strlen(str->data); // 计算实际输入的字符数
}
}
// 手动实现字符串查找
int findSubstring(String* mainStr, const char* substr) {
for (int i = 0; i <= mainStr->length - substr->length; i++) {
int match = 1;
for (int j = 0; j < substr->length; j++) {
if (mainStr->data[i + j] != substr[j]) {
match = 0;
break;
}
}
if (match) {
return i; // 如果匹配成功,返回起始位置
}
}
return -1; // 如果未找到,返回-1
}
// 清理动态分配的内存
void freeString(String* str) {
free(str->data);
free(str);
}
int main() {
String* str = createEmptyString();
inputString(str);
const char* substr = "test";
int position = findSubstring(str, substr);
printf("Found substring '%s' at position %d\n", substr, position);
freeString(str); // 别忘了释放内存
return 0;
}
```
在这个示例中,`createEmptyString` 函数用于创建一个空的顺序串,`inputString` 负责接收用户输入并保存到数组中,`findSubstring` 实现了字符串查找功能。注意,在实际项目中,应处理可能出现的内存分配失败的情况。
阅读全文