string的标准库练习

转载 2015年11月21日 12:35:34
#include <stdio.h>
#include <assert.h>

size_t strlen(const char *s);
void *memset(void *src, int n, size_t count);
char *strstr(const char *s1, const char *s2);
char *strcat(char *des, const char *src);
char *strncat(char *des, const char *src, size_t n);
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
char *mystrcpy(char *des, const char *src);
char *mystrncpy(char *des, const char *src ,size_t n);


size_t strlen(const char *s)//计算字符串长度
{
	if( s == NULL)
		return 0;
	size_t length = 0;
	while(*s)
	{
		length ++;	//长度加一
		s ++;		//地址加一
	}
	return length;
}

void *memset(void *src, int c, size_t count)//第二参数为整形,原因为大多开发人员填入为0,转换成字符就是'\0',也就是终结符,如果是字符参数,不可以要用户填写'\0'吧!!!
{
	assert(src != NULL);//assert是出错提醒,在BUGED有效,在relseas无效,当有两个条件时,无法识别哪个出错
	char *tmp = (char*)src;//取得首地址
	while(count--)
	{
		*tmp = (char)c; 
		tmp ++;
	}
	return tmp;
}

char *strstr(const char *s1, const char *s2)//从字符串找存在指定的小字符串
{
	int i = 0;
	assert(s1 != NULL);
	if (s2 != NULL)
	{
		while( *s1 )
		{
			for(i = 0; *(s1+i) == *(s2+i); i++)
			{
				if( !*(s2+i+1) )
					return (char*)s1;//找到符合条件,字符串1返回找到值以后的全部字符
			}
			s1++;
		}
		return NULL;//搜索完未找到符合的返回NULL;
	}else{
		return (char*)s1;
	}
}

char *strcat(char *des, const char *src) //合并字符串
{
	char *address = des;
	assert( des != NULL );
	assert( src != NULL );
	while(*des)//取得第一个字符串最后一位地址
	{
		des++;	
	}
	while(*des++ = *src++)//将第二个字符串存储区内容赋给第一个字符串后面的
	//以上这句可以理解为 do {*des++ = *src; src++; while( *des != '\0' ) }
	{	
		NULL;
	}
	
	return address;
}

char *strncat(char *des, const char *src, size_t n)
{
	size_t des_len = strlen(des);
	size_t i;
	for (i = 0; i < n && src[i] != '\0'; i++)
	{
		des[des_len + i] = src[i];
	}
	des[des_len + i] = '\0';
	return des;
}

int strcmp(const char *s1, const char *s2)//比较字符串大小
{	
	while( *s1 == *s2 )
	{
		if( *s1 == '\0' )
			return 0;
		s1 ++;
		s2 ++;
	}
	return *s1 - *s2;
}

int strncmp(const char *s1, const char *s2, size_t n)
{	
	while( *s1 == *s2 && n > 0)
	{
		if( *s1 == '\0' )
			return 0;
		s1 ++;
		s2 ++;
		n --;
	}
	return *s1 - *s2;
}

char *mystrcpy(char *des, const char *src)//注意这里可能和系统中strcpy冲突,最好换个函数名称。
{
	assert(des != NULL);
	assert(src != NULL);
	char *addr = des;
	while(*src)
	{
		*des = *src;
		des++;
		src++;
	}
	*des = '\0';
	return addr;
}

char *mystrncpy(char *des, const char *src ,size_t n)//这里和strcpy存在相同问题
{
	assert(des != NULL);
	assert(src != NULL);
	char *addr = des;
	int i = 0;
	for(i = 0; i < n && *src != '\0'; i++)
	{
		*des = *src;
		des++;
		src++;
	}
	*des = '\0';
	return addr;
}



int main()
{
	char x[20]; 
	char y[20]={"abcxyz"};
	char *p_x = y;	
	memset(x, 0, sizeof(x));
	char *x1=strstr(y,"xy");
	printf("%s\n",x1);
	int i = 0;
	for(i = 0; i<5; i++)
		x[i] = 'a' + i;
	printf("x[] = %s\n",x);
	printf("strcat = %s\n",strcat(x, y));
	printf("strncat = %s\n",strncat(x, y,1));
	printf("strcmp = %d\n",strcmp("abd", "abd"));
	printf("strncmp = %d\n",strncmp("abc", "abd", 3));
	printf("x[] = %s\n",x);
	printf("mystrcpy = %s\n",mystrcpy(x,"desdd"));
	printf("mystrncpy = %s\n",mystrncpy(x,"desss",2));
	return 0;
}	

标准库string处理数字的方法

  • 2007年09月06日 11:34
  • 508B
  • 下载

C++学习(一)——标准库类型之string全解析

标准库类型之string类 常见面试题:实现一个 String 类

《c++ primer》-——1 标准库string类型

1.命名空间的using声明: 之前在编写程序时使用std空间中的定义,采用的是 std::cin>>a; std::cout 作用域限定符::的含义是右操作数可以在左操作数中找到定义. 显然这...

3.2 标准库string类型

本章大意 讲述了标准库string类型的相关知识 细节摘录 1. 存储string的size操作结果的变量必须为string::size_type,不要给int。 课后习题 1. 默认构造函数是指...

[C/C++标准库]_[初级]_[使用模板删除字符串前后空格((w)string space)]

1. C++没有提供删除std::(w)string的前后空格的函数,比如TrimSpace. 2. 很多库都提供, 但是为了移植代码方便,最好还是能用标准库解决就用标准库....

C++ 标准库中 string 使用的优化技术

往容器中添加元素,若是要使用移动语义,一样的使用 std::move. int main(){ std::string s{"hello world"}; std::cout ...

【C++ Primer】【学习笔记】【第三章】标准库类型之:string类型

本章讲解如下三种标准库类型:string、vector、bitset。其中,string定义了大小可变的字符串;vector用于保存一组指定类型的对象;bitset提供了一种抽象方法来操作位的集合。 ...
  • jay_yin
  • jay_yin
  • 2014年12月18日 00:40
  • 195

C++ Primer 学习笔记(4)——标准库string类型

之所以空着笔记三,是因为3的内容要先于4,但似乎课本不是这么认为的。 string对象的定义和初始化 几种方式: string s1; //s1 is empty string s2(s1);...

第三章:标准库类型:string、 vector 和 bitset类型

C++中的类型:        基本数据类型(内置):   参考:(  http://blog.csdn.net/phunxm/article/details/5071772 )       ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:string的标准库练习
举报原因:
原因补充:

(最多只允许输入30个字)