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
//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
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- 如何组织构建多文件 C 语言程序(二)
- 关于指针的一些事情
- android上改变listView的选中颜色
- String.intern
- 如何写好 C main 函数
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- Lua中调用C++函数示例
- Lua和C语言的交互详解
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- PostgreSQL ERROR: invalid escape string 解决办法
- C++联合体转换成C#结构的实现方法
- 关于C语言中参数的传值问题