动态串及其基本操作(C语言实现)
2008-12-23 20:27
423 查看
BCPL BasicCombinedProgammingLanguage即C语言实现
动态串及基本操作实现
#include <stdlib.h>
#include <stdio.h>
typedef struct{
char* ch;
int length;
}HString;
//赋值
int strAssign(HString *s, char* chars){
int len=0,i;
if(s->ch != NULL)
free(s->ch); //释放原有空间
while(chars[len] != '/0'){
len++;//求得char数组的长度
}
if(!len){//空串
s->ch = NULL;
s->length = 0;
}
else{
s->ch = (char*)malloc(len * sizeof(char));
if(!s->ch)
exit(-1);
for(i=0;i<len;i++){
s->ch[i] = chars[i];
s->length = len;
}
}
return 1;
}
//clear string
int clearString(HString *s){
if(s->ch)
free(s->ch);
s->ch = NULL;
s->length = 0;
return 1;
}
//get the length
int strLength(HString s){
return s.length;
}
//compare
int strCmp(HString s,HString t){
int i;
for(i=0;i<s.length && i<t.length;i++){
if(s.ch[i] != t.ch[i])
return (s.ch[i]-t.ch[i]);
}
return (s.length-t.length);
}
//insert string t
int strInsert(HString* s, int pos, HString t){
int i;
if(pos<1 || pos>(s->length+1))
return -1;
if(t.length){
s->ch = (char*)realloc(s->ch,(s->length + t.length) * sizeof(char));
if(!s->ch)
exit(-1);
//后移pos之后的所有元素
for(i=s->length-1; i>=pos; i--){
s->ch[t.length + i] = s->ch[i];
}
//将t中所有元素插入s中
for(i=0;i<t.length;i++){
s->ch[pos+i] = t.ch[i];
}
s->length += t.length;
s->ch[s->length] = '/0';
}
return 1;
}
//cpy
int strCpy(HString *s,HString t){
int i;
if(s->ch)
free(s->ch);
s->ch = (char* )malloc(t.length * sizeof(char));
if(!s->ch)
exit(-1);
for(i=0; i<t.length; i++){
s->ch[i] = t.ch[i];
}
s->length = t.length;
return 1;
}
//catenate string
int strCat(HString *s,HString t1,HString t2){
int i;
if(s->ch)
free(s->ch);
s->ch = (char* )malloc((t1.length + t2.length) * sizeof(char));
if(!s->ch)
exit(-1);
s->length = t1.length + t2.length;
for(i=0; i<t1.length; i++){
s->ch[i] = t1.ch[i];
}
for(i=0; i<t2.length; i++){
s->ch[t1.length + i] = t2.ch[i];
}
return 1;
}
//get the substring
int substring(HString *s,HString t,int pos, int len){
int i;
if(pos < 1 || pos > t.length+1 || len<0 || len > (t.length-pos+1) ){
return 0;
}
if(s->ch)
free(s->ch);
if(!len){
s->ch = NULL;
s->length = 0;
}
else
{
s->ch = (char* )malloc(len * sizeof(char));
if(!s->ch)
exit(-1);
for(i=0; i<len; i++){
s->ch[i] = t.ch[pos+i-1];
s->length = len;
}
}
return 1;
}
//print the string
void strPrint(HString s){
int i;
if(!s.length){
printf("the string is empty!/n");
}
else
{
for(i=0; i<s.length; i++){
printf("%c",s.ch[i]);
}
printf("/n");
}
}
#include "string_1.h"
HString s,t,s1,s2;
main(){
char str1[] = "String operate function!";
char str2[] = "basic ";
int len,cmp;
//初始化,赋值
strAssign(&s,str1);
strAssign(&t,str2);
//length
len = strLength(s);
printf("the length of string s is %d/n",len);
//display the string s and t
printf("string s:");
strPrint(s);
printf("string t:");
strPrint(t);
//compare
cmp = strCmp(s,t);
if(cmp > 0){
printf("/ns is larger than t/n");
}
else if(cmp < 0){
printf("/nt is larger than s/n");
}
else{
printf("/nequal/n");
}
//insert
strInsert(&s,7,t);
printf("after insert (t to s) at the 7: ");
strPrint(s);
//copy
strCpy(&s,t);
printf("after copied: /nstring s:");
strPrint(s);
//catenate
strCat(&s1,s,t);
printf("/nafter catenate(t to s):");
strPrint(s1);
printf("/nNow the string s is :");
strPrint(s);
//substring
substring(&s2,s,1,4);
printf("/nsubstring from s:/n");
strPrint(s2);
getchar();
}
动态串及基本操作实现
#include <stdlib.h>
#include <stdio.h>
typedef struct{
char* ch;
int length;
}HString;
//赋值
int strAssign(HString *s, char* chars){
int len=0,i;
if(s->ch != NULL)
free(s->ch); //释放原有空间
while(chars[len] != '/0'){
len++;//求得char数组的长度
}
if(!len){//空串
s->ch = NULL;
s->length = 0;
}
else{
s->ch = (char*)malloc(len * sizeof(char));
if(!s->ch)
exit(-1);
for(i=0;i<len;i++){
s->ch[i] = chars[i];
s->length = len;
}
}
return 1;
}
//clear string
int clearString(HString *s){
if(s->ch)
free(s->ch);
s->ch = NULL;
s->length = 0;
return 1;
}
//get the length
int strLength(HString s){
return s.length;
}
//compare
int strCmp(HString s,HString t){
int i;
for(i=0;i<s.length && i<t.length;i++){
if(s.ch[i] != t.ch[i])
return (s.ch[i]-t.ch[i]);
}
return (s.length-t.length);
}
//insert string t
int strInsert(HString* s, int pos, HString t){
int i;
if(pos<1 || pos>(s->length+1))
return -1;
if(t.length){
s->ch = (char*)realloc(s->ch,(s->length + t.length) * sizeof(char));
if(!s->ch)
exit(-1);
//后移pos之后的所有元素
for(i=s->length-1; i>=pos; i--){
s->ch[t.length + i] = s->ch[i];
}
//将t中所有元素插入s中
for(i=0;i<t.length;i++){
s->ch[pos+i] = t.ch[i];
}
s->length += t.length;
s->ch[s->length] = '/0';
}
return 1;
}
//cpy
int strCpy(HString *s,HString t){
int i;
if(s->ch)
free(s->ch);
s->ch = (char* )malloc(t.length * sizeof(char));
if(!s->ch)
exit(-1);
for(i=0; i<t.length; i++){
s->ch[i] = t.ch[i];
}
s->length = t.length;
return 1;
}
//catenate string
int strCat(HString *s,HString t1,HString t2){
int i;
if(s->ch)
free(s->ch);
s->ch = (char* )malloc((t1.length + t2.length) * sizeof(char));
if(!s->ch)
exit(-1);
s->length = t1.length + t2.length;
for(i=0; i<t1.length; i++){
s->ch[i] = t1.ch[i];
}
for(i=0; i<t2.length; i++){
s->ch[t1.length + i] = t2.ch[i];
}
return 1;
}
//get the substring
int substring(HString *s,HString t,int pos, int len){
int i;
if(pos < 1 || pos > t.length+1 || len<0 || len > (t.length-pos+1) ){
return 0;
}
if(s->ch)
free(s->ch);
if(!len){
s->ch = NULL;
s->length = 0;
}
else
{
s->ch = (char* )malloc(len * sizeof(char));
if(!s->ch)
exit(-1);
for(i=0; i<len; i++){
s->ch[i] = t.ch[pos+i-1];
s->length = len;
}
}
return 1;
}
//print the string
void strPrint(HString s){
int i;
if(!s.length){
printf("the string is empty!/n");
}
else
{
for(i=0; i<s.length; i++){
printf("%c",s.ch[i]);
}
printf("/n");
}
}
#include "string_1.h"
HString s,t,s1,s2;
main(){
char str1[] = "String operate function!";
char str2[] = "basic ";
int len,cmp;
//初始化,赋值
strAssign(&s,str1);
strAssign(&t,str2);
//length
len = strLength(s);
printf("the length of string s is %d/n",len);
//display the string s and t
printf("string s:");
strPrint(s);
printf("string t:");
strPrint(t);
//compare
cmp = strCmp(s,t);
if(cmp > 0){
printf("/ns is larger than t/n");
}
else if(cmp < 0){
printf("/nt is larger than s/n");
}
else{
printf("/nequal/n");
}
//insert
strInsert(&s,7,t);
printf("after insert (t to s) at the 7: ");
strPrint(s);
//copy
strCpy(&s,t);
printf("after copied: /nstring s:");
strPrint(s);
//catenate
strCat(&s1,s,t);
printf("/nafter catenate(t to s):");
strPrint(s1);
printf("/nNow the string s is :");
strPrint(s);
//substring
substring(&s2,s,1,4);
printf("/nsubstring from s:/n");
strPrint(s2);
getchar();
}
相关文章推荐
- C语言实现单链表的基本操作及其部分面试题
- 静态串及其基本操作(C语言实现)
- c语言实现单链表数据结构及其基本操作
- 单链表及其基本操作(C语言实现)
- C语言实现单链表的基本操作及其部分面试题
- c语言实现链表及其基本操作
- C语言实现顺序表的插入、删除、查找、遍历等基本操作
- 实验4:栈和队列的基本操作实现及其应用之《链队列》
- 实验一线性表的基本操作实现及其应用
- 顺序存储结构线性表基本操作 纯C语言实现
- 算法与数据结构-栈的基本操作C语言实现
- c++模板类递归实现二叉搜索树及其基本操作
- 实验三 顺序栈的基本操作实现及其应用
- 单链表的存储结构及其基本操作的实现
- 实验三:栈和队列的基本操作实现及其应用——顺序栈
- 实验4:栈和队列的基本操作实现及其应用——链栈
- C语言实现,无头结点不带环的单向链表的基本操作
- Avl树的基本操作(c语言实现)
- 实验4:栈和队列的基本操作实现及其应用之《链队列》
- 顺序线性表的基本操作(C语言实现)