C++ string源码

706 篇文章 ¥99.90 ¥299.90
280 篇文章
80 篇文章
本文探讨了C++中的string类源码,重点分析了C和C++中字符串处理函数如strlen、strcpy的实现,并结合C++的string类进行深入讲解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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[n])
				{
					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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值