您的位置:首页 > 编程语言 > C语言/C++

C++ string源码

2016-06-03 10:29 543 查看
c和c++的string源代码

//String类源代码
//一.C字符串

//1. strlen(),计算字符串长度
int strlen(const char string)
{
int i=0;
while(string[i]) i++;
return i;
}
//2. strcpy(), 字符串拷贝.
char *strcpy(char *destination, const char *source)
{
while(*destinaton++=*source++);
return (destination-1);
}
//3. strcat(), 字符串的连接.
char *strcat(char *target,const char *source)
{
char *original=target;
while(*target) target++; // Find the end of the string
while(*target++=*source++);
return(original);
}
//4. streql(), 判断两个字符串是否相等.
int streql(char *str1,char *str2)
{
while((*str1==*str2)&&(*str1))
{
str1++;
str2++;
}
return((*str1==NULL)&&(*str2==NULL));
}
//5. strchr(), 在字符串中查找某个字符.
char *strchr(const char *string,int letter)
{
while((*string!=letter)&(*string))
string++;
return (string);
}
//6. chrcnt(), 计算某个字符在字符串中出现的次数.
int chrcnt(const char *string,int letter)
{
int count=0;
while(*string)
if(*string==letter)count++;
return count;
}
//7. strcmp(), 判断两个字符串是否相等.
int strcmp(const char *str1,const char *str2)
{
while((*str1==*str2)&&(*str1))
{
str1++;
str2++;
}
if((*str1==*str2)&&(!*str1)) //Same strings
return o;
else if((*str1)&&(!*str2)) //Same but str1 longer
return -1;
else if((*str2)&&(!*str1)) //Same but str2 longer
else
return((*str1>*str2)?-1:1);
}

//二. String类
int size(string str)
{
//return the size of a string
int count = 0;
while(str[count])
{
count++;
}
return count;
}

bool empty(string str)
{
//check whether a string is empty or not
bool empty = false;
if(size(str) == 0)
{
empty = true;

}
return empty;
}

int find1(string str, char a, int index)
{
//return the index of a specific character begin from the start index
//如果index =0,直接初始化i = 0
int i = index;
while(i < str.size())
{
if(str[i] == a)
{
break;
}
i++;
}
return i;
}

int find2(string str, char a, int index)
{
//从index起倒着数找a
//如果无index,直接初始i = str.size() - 1
int i = index;
while(i >= 0)
{
if(str[i] == a)
{
break;
}
i--;
}
return i;
}
int find3(string str, string aa)
{
//查一个string, 返回index
//若有startindex,则初始化i = startindex
int index;
for(int i = 0; i < str.size(); i++)
{
if(str[i] == aa[0])
{
int m = i;
int n = 0;
bool check = true;
for(/*int m = i, int n = 0*/; m < str.size(), n < aa.size(); m++, n++)
{
if(str[m] != aa
)
{
check = false;
break;
}
}
if(check)
{
index = i;
break;
}
}
}
return index;
}

string substring(string str, int index, int length)
{
//return a substring from the startindex
//若限制长度,则i < index + length
string substring;
for(int i = index; i < str.size(); i++)
{
substring.push_back(str[i]);
}
return substring;
}
string append(string str, string a)
{
//追加字符串
for(int j = 0; j < a.size(); j++)
{
str.push_back(a[j]);
}
return str;
}
string erase(string str, int index, int length)
{
string temp;
for(int i = 0; i < index; i++)
{
temp.push_back(str[i]);
}
for(int i = index + length; i < str.size(); i++)
{
temp.push_back(str[i]);
}

str = temp;

return str;
}
string clear(string str)
{
string temp = "";
str = temp;
return str;
}
void pushback(string &str, char a)
{
//append a character
str = str + a;
}
string insert(string str, int index, string a)
{
//insert a string
string result;
for(int i = 0; i < index; i++)
{
result.push_back(str[i]);
}
result += a;
for(int i = index; i < str.size(); i++)
{
result.push_back(str[i]);
}

return result;
}
int compare(string str, string a)
{
for(int i = 0; i < str.size() && i < a.size(); i++)
{
if(str[i] != a[i])
{
return str[i] - a[i];
}
}
return 0;
}
http://wenku.baidu.com/view/9f8035e9b8f67c1cfad6b869.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息