C++ string源码

707 篇文章 ¥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

### 回答1: C++ 标准库中的 `string` 类型是用来表示和操作字符串的类。它在 `<string>` 头文件中定义。 `string` 类使用动态数组来存储和管理字符串。它具有许多方便的成员函数,可以进行字符串的插入、删除、查找、拷贝、连接、子串提取等操作。 `string` 类的源码是由 C++ 标准委员会实现,通常是在编译器的标准库中。由于 `string` 是一个模板类,其实现需要一些复杂的底层操作,如内存管理、字符串拷贝、字符大小比较等。 源码的具体实现可能因不同编译器而异,但一般会使用指针、指针运算、动态内存分配等技术来实现字符串的存储和操作。可以通过查看 C++ 标准库的实现源码来了解具体的细节。 总的来说,`string` 类是 C++ 标准库中用于处理字符串的类,其源码实现了字符串的存储和操作功能,常用于编写 C++ 程序中字符串的处理和操作。 ### 回答2: C string是C语言中用于表示字符串的一种数据类型,它是以null字符('\0')结尾的字符数组。在C语言中,字符串常常是用字符数组来表示的,而C string则是对字符数组的一种封装。 在C语言中,字符串常常是以字符数组的形式存储的,例如: char str[10] = "Hello"; 这里str是一个字符数组,它可以存储10个字符,包括字符串"Hello"的5个字符和一个结尾的null字符。 而C string则是对于字符数组的一种封装,它提供了一些用于操作字符串的函数,比如字符串的复制、连接、查找等等。C string源码可以在C标准库中找到,一般是以头文件的形式提供给开发者使用。 在C标准库中,有很多与C string相关的函数,比如strcpy()函数用于复制字符串、strcat()函数用于连接字符串、strlen()函数用于获取字符串的长度等等。这些函数都是通过操作字符数组来实现的,对于开发者来说,可以直接调用这些函数来进行字符串操作,无需关心具体的实现细节。 C string源码一般会包含在C标准库的源码中,开发者可以在编译器的安装目录下找到相应的源码文件。这些源码文件一般是以.c或者.cpp文件的形式存在,其中定义了与C string相关的各种函数的实现。 总之,C string是C语言中用于表示字符串的一种数据类型,它是通过对字符数组的封装来实现的。开发者可以直接使用C string提供的函数来进行字符串操作,而无需关心具体的实现细节。 C标准库中提供了与C string相关的函数的源码,开发者可以查看这些源码来了解其具体实现。 ### 回答3: C++中的字符串类 string 是一个非常常用的数据类型,它属于标准库中的一部分,主要用于处理字符串。 在C++的标准库中,string 类被定义在头文件<iostream>或<string>中。通过使用 string 类,我们可以方便地进行字符串的输入、输出、连接、比较等操作。 string 类的内部实现是以动态数组的形式存储字符串的每个字符,并且在需要的时候进行动态内存分配和释放。这也使得 string 类具有了自动管理内存的特性,更加方便和安全。 C++中的 string 类提供了许多常用的成员函数,例如 size()、length()、empty()、clear()等,用于获得字符串的长度、判断字符串是否为空、清空字符串等操作。此外,还可以通过下标访问字符串中的每个字符,对字符串进行遍历和修改。 string 类支持字符串的连接、拷贝和比较等功能。可以使用“+”操作符实现字符串的连接,使用“=”,“==”等操作符进行拷贝和比较。另外,string 类还提供了一些方便的函数,如 append()、substr()等,用于对字符串进行添加和截取等操作。 总的来说,C++中的 string 类简化了字符串的处理过程,提供了丰富的成员函数和操作符,使得字符串的操作更加简单、高效和安全。所以,在C++中如果需要处理字符串,string 类是一个不错的选择。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值