/*
* HString.h
*
* Created on: Oct 7, 2015
* Author: chris
*/
#ifndef HSTRING_H_
#define HSTRING_H_
#include<iostream>
struct HString{
int length;
char *ch;
HString(): length(0), ch(NULL) {}
};
bool StrAssign(HString &hs, char *str);
void StrClr(HString &hs);
int StrLen(HString hs);
bool SubStr(HString& Sub, HString S, int len, int pos);
int StrCmp(HString &lhs, HString &rhs);
bool StrCat(HString &lhs, HString &rhs);
void StrPrint(HString str);
int Index()
#endif /* HSTRING_H_ */
/*
* HString.cpp
*
* Created on: Oct 7, 2015
* Author: chris
*/
#include<iostream>
#include"HString.h"
using namespace std;
bool StrAssign(HString &S, char *str)
{
if(S.ch) delete S.ch;
char *ch = str;
int cnt = 0;
while(*ch++) ++cnt;
if(cnt != 0) {
S.ch = new char[cnt];
if(!S.ch) return false;
for(int i = 0; i < cnt; ++i)
S.ch[i] = str[i];
}
S.length = cnt;
return true;
}
void StrClr(HString &S)
{
if(S.ch) delete S.ch;
S.length = 0;
}
int StrLen(HString S)
{
return S.length;
}
bool SubStr(HString& Sub, HString S, int len, int pos)
{
if(pos < 0 || pos >= S.length || len < 0 || pos+len > S.length)
return false;
if(Sub.ch) delete Sub.ch;
Sub.ch = new char[len];
if(!Sub.ch) return false;
for(int i = 0; i < len; ++i)
Sub.ch[i] = S.ch[pos+i];
Sub.length = len;
return true;
}
int StrCmp(HString &lhs, HString &rhs)
{
if(lhs.length != rhs.length)
return lhs.length - rhs.length;
for(int i = 0; i < lhs.length; ++i) {
if(lhs.ch[i] != rhs.ch[i])
return lhs.ch[i] - rhs.ch[i];
}
return 0;
}
bool StrCat(HString &lhs, HString &rhs)
{
char*temp = new char[lhs.length + rhs.length];
if(!temp) return false;
for(int i = 0; i < lhs.length; ++i)
temp[i] = lhs.ch[i];
for(int i = 0; i < rhs.length; ++i)
temp[lhs.length+i] = rhs.ch[i];
if(lhs.ch) delete lhs.ch;
lhs.ch = temp;
lhs.length = lhs.length + rhs.length;
return true;
}
void StrPrint(HString str)
{
for(int i = 0; i < str.length; ++i)
cout << str.ch[i];
cout << endl;
}