简单的实现串的操作,其实这与那些字符串库函数所用的操作思想是相同的,但是这是一种数据的存储方式,与操作,重点强调了数据的存储.
下面是串的非堆存储操作,说明白就是穿类似数组的存储,在分配内存时在栈中分配:
/**********************************************************************
* * Copyright (c)2015,WK Studios
* * Filename: str.h
* * Compiler: GCC vc 6.0
* * Author:WK
* * Time: 2015 25 5
* **********************************************************************/
#pragma once
#include<iostream>
using namespace std;
#include<assert.h>
#define MAX_STR_LEN 20
typedef char SString[MAX_STR_LEN+2];//首元素放串的长度,再给'\0'空间
//1.生成一个值为s的串ss
bool StrAssign(SString ss,char *s);
//2.复制串s得到串ss
bool StrCopy(SString ss,SString s);
//一.字符串拷贝,返回新字符串的首地址
char *my_strcpy(char *d, const char *str);
//3.判空
bool StrEmpty(SString ss);
//4.比较字符串
int StrCompare(SString ss,SString s);
//二.字符串比较
size_t my_strcmp(const char *d,const char *str);
//5.求串长度
size_t StrLength(SString ss);
//三.求字符串长度(在使用返回值时可以强制类型转换将无符号转换为有符号进行运算)
size_t my_strlen(const char *str);
//6.把字符串s1和s2联接成新串ss
bool Concat(SString ss,SString s1,SString s2);
//四.字符串连接,返回新串的首地址
char *my_strcat(char *d,const char *str);
//7. 返回串ss从pos位置起长度为len的子串并用数组sub保存
bool SubString(SString sub,SString ss,size_t pos,size_t len);
//8.返回从ss串pos位置开始与c串有相同的子串出现的位置(只返回第一次出现的相同子串)
size_t Index(SString ss,SString c,size_t pos);
//9.用串v替换ss串中和c串相等的子串
bool Replace (SString ss,SString c,SString v);
//10.在串ss的第pos个字符前面插入串c
bool StrInsert(SString ss,size_t pos,SString c);
//11.删除串ss中第pos个字符开始长度