首页 > 代码库 > 字符串解析
字符串解析
#include<stdlib.h>
#define FALSE 0 //函数执行错误返回0
#define TRUE 1 //函数执行正确返回1
//串的堆分配存储表示
typedef struct
{
char *ch;
int length;
}String;
//对串的所有操作都可以通过以下五个基本函数实现
void StrInit(String *);//串的初始化函数
int StrAssign(String *,char *);//串赋值
int StrLength(String str); //求串长
int StrCompare(String ,String); //串比较
int StrCombine(String *,String,String);//串连接
int StrSub(String *,String,int,int); //求子串
#include "q.h"
#include <stdio.h>
void InitStr(String *str) //传引用初始化字符串
{
str->ch = NULL;
str->length = 0;
}
int StrAssign(String *str,char *s)
{
if(!str->ch) //先判断如果字符串不为空赋值字符串为空
{
free(str->ch);
str->ch = NULL;
}
int i;
for (i = 0;s[i]!=‘\0‘;i++);//查看输入的字符串此时i在\0的位置
if(!i) //如果输入的字符串为空串则直接赋值为空
{
str->ch=NULL;
str->length = 0;
}
else // 如果输入的字符串不是空串
{
str->ch=(char*)malloc(sizeof(char)*(i+1));//分配char字符串包括\0内存大小加入分配一个字符
if(!str->ch) //分配内存失败退出
{
printf("ORVEFLOW!");
return FALSE;
}
for (int j=0;j<=i;j++) //从字符串的开始处赋值ch[0]为首地址
{
*(str->ch+j) = s[j]; //s字符串从开始复制str->ch
str->length = i;
}
}
return TRUE;
}
int StrLength(String str) //求字符串长度直接从结构体中返回
{
return str.length;
}
void main()
{
String str;
InitStr(&str);
StrAssign(&str,"hello world");
printf("%d",StrLength(str));
}