目录
什么是串 及其特点
初始化串
串赋值
打印
暴力匹配
主函数(验证)
什么是串 及其特点
串在一块连续的内存,在C语言中可以看成是一个字符数组;
结构体包含:1.数据域(字符串内容)
2.字符串长度
这里就不讲什么是暴力匹配了,用文字讲不太清楚,不懂的可以去找视频讲解
初始化串
typedef struct String {
char* data;
int lenth;
}String;
String* initString() {
String* S = (String*)malloc(sizeof(String));
S->data = NULL;
S->lenth = 0;
return S;
}
串赋值
void assignString(String* S,char* data) {
//先判断S是否为空
//if (S->data)
if(S->lenth == 0)
free(S->data);
int len =0;
char* temp = data;
while (*temp) {//当temp指向\0是结束循环
len++;
temp++;
}
if (len == 0) {
S->data = NULL;
S->lenth = 0;
}
else{
//temp = data;
S->data = (char*)malloc(sizeof(char)*(len + 1));
//多一位用于保存字符串结尾\0
S->lenth = len;
for (int i = 0; i < len; i++) {
S->data[i] = data[i];
}
}
}
打印
void printString(String* S) {
for (int i = 0; i < S->lenth; i++) {
printf(i == 0 ? "%c" : "->%c", S->data[i]);
}
printf("\n");
}
暴力匹配
void forcematch(String* S, String* sub) {
int i = 0;//指向主串
int j = 0;//指向子串
while (i <= S->lenth && j
if (S->data[i] == sub->data[j]) {
i++;
j++;
}
else {//重置指针
i = i - j + 1;
j = 0;
}
}
if (j == sub->lenth) {
printf("force match success\n");
}
else
printf("force match fail\n");
}
主函数(验证)
int main() {
String* S = initString();
String* sub = initString();
assignString(S, "huang");
printString(S);
assignString(sub, "ang");
printString(sub);
forcematch(S, sub);
return 0;
}
完整源代码
#include "headfile.h" typedef struct String { char* data; int lenth; }String; String* initString() { String* S = (String*)malloc(sizeof(String)); S->data = NULL; S->lenth = 0; return S; } void assignString(String* S,char* data) { //先判断S是否为空 //if (S->data) if(S->lenth == 0) free(S->data); int len =0; char* temp = data; while (*temp) {//当temp指向\0是结束循环 len++; temp++; } if (len == 0) { S->data = NULL; S->lenth = 0; } else{ //temp = data; S->data = (char*)malloc(sizeof(char)*(len + 1)); //多一位用于保存字符串结尾\0 S->lenth = len; for (int i = 0; i < len; i++) { S->data[i] = data[i]; } } } void printString(String* S) { for (int i = 0; i < S->lenth; i++) { printf(i == 0 ? "%c" : "->%c", S->data[i]); } printf("\n"); } void forcematch(String* S, String* sub) { int i = 0;//指向主串 int j = 0;//指向子串 while (i <= S->lenth && jlenth) { if (S->data[i] == sub->data[j]) { i++; j++; } else {//重置指针 i = i - j + 1; j = 0; } } if (j == sub->lenth) { printf("force match success\n"); } else printf("force match fail\n"); } int main() { String* S = initString(); String* sub = initString(); assignString(S, "huang"); printString(S); assignString(sub, "ang"); printString(sub); forcematch(S, sub); return 0; }