`
moxiaomomo
  • 浏览: 45681 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

懂得实现字符串的操作(strcpy函数等)(一)

    博客分类:
  • C++
阅读更多
一般面试的时候,如果要考查你的C++基本功,关于字符串的实现的内容出现的频率比较高。
下面是个人实现的三个简单的字符串相关函数,以后会陆续补充。

//(1)查找字符串中的子串
int mystrstr(const char* string,const char* substring)
{
	if(string==NULL||substring==NULL)return -1;

	int s1=strlen(string);
	int s2=strlen(substring);

	if(s1<s2)return-1;

	const char* temp=substring;

	while(*(string++)!='\0')      //字符串未扫描完毕
	{
		if(*string==*substring)	  //当前字符匹配
		{
			while(*substring!='\0')		 //判断是否与整个目标字符串匹配
			{
				if(*(string++)!=*(substring++))		 //若匹配过程不成功,则进行下一阶段扫描
				{substring=temp;break;}
				
				if(*substring=='\0')return 1;     //匹配成功
			}
		}
	}

	return -1;
}

//(2)复制字符串函数
char* mystrcpy(char* DestStr,const char* SrcStr)    //源字符串标明为const
{
	if(DestStr==SrcStr)return DestStr;			  //自我复制
	assert((DestStr!=NULL)&&(SrcStr!=NULL));	  //断言地址非空

	char* tempStr=DestStr;

	while((*(DestStr++)=*(SrcStr++))!='\0');	//复制过程,遇到'\0'结束

	return tempStr;							 //返回目标地址,方便链式操作
}

//(3)在一个字符串中找到第一个只出现一次的字符。如输入dsfsdfghyjkoooi,结果将输出g。
char findDestChar(const char* str)
{
	int hashTable[256]={0};	   //一个字符一个byte,则字符个数不超过256个

	const char* temp=str;
	while(*str!='\0')
	{
		hashTable[*str]++;
		str++;
	}
	while(*temp!='\0')
	{
		if(hashTable[*temp]==1)return *temp;
		temp++;
	}

	return '\0';
}


资料补充:关于strcpy函数实现的标准,如何将它写得完美(转载自http://blog.csdn.net/v_JULY_v/archive/2011/05/13/6417600.aspx)
//得2分     
void strcpy( char *strDest, char *strSrc )     
{     
    while( (*strDest++ = * strSrc++) != '\0' );     
}      
  
//得4分     
void strcpy( char *strDest, const char *strSrc )      
{     
    //将源字符串加const,表明其为输入参数,加2分     
    while( (*strDest++ = * strSrc++) != '\0' );     
}      
  
//得7分     
void strcpy(char *strDest, const char *strSrc)      
{     
    //对源地址和目的地址加非0断言,加3分     
    assert( (strDest != NULL) && (strSrc != NULL) );     
    while( (*strDest++ = * strSrc++) != '\0' );     
}      
  
//得9分     
//为了实现链式操作,将目的地址返回,加2分!     
char * strcpy( char *strDest, const char *strSrc )      
{     
    assert( (strDest != NULL) && (strSrc != NULL) );     
    char *address = strDest;      
    while( (*strDest++ = * strSrc++) != '\0' );      
    return address;     
}    
  
//得10分,基本上所有的情况,都考虑到了  
//如果有考虑到源目所指区域有重叠的情况,加1分!     
char * strcpy( char *strDest, const char *strSrc )      
{     
    if(strDest == strSrc) { return strDest; }  
    assert( (strDest != NULL) && (strSrc != NULL) );     
    char *address = strDest;      
    while( (*strDest++ = * strSrc++) != '\0' );      
    return address;     
}   

2
2
分享到:
评论
2 楼 moxiaomomo 2011-05-21  
基德KID.1412 写道
查找字符串中的子串,子串可以不连续对吧?

一般来说子串应该是指连续的吧
1 楼 基德KID.1412 2011-05-21  
查找字符串中的子串,子串可以不连续对吧?

相关推荐

    C语言程序设计-用函数实现字符串的复制, 不允许用strcpy()函数.c

    C语言程序设计-用函数实现字符串的复制, 不允许用strcpy()函数.c

    字符串操作函数大全(String)

    今天,我们将对字符串操作函数大全进行讲解,包括字符串拷贝、字符串连接、字符串比较等多种操作。 字符串拷贝 在字符串操作中,字符串拷贝是最基本的一种操作。C 语言提供了多种字符串拷贝函数,例如 strdup、...

    字符串操作函数,c(c++)

    本文将详细解释三个常用的字符串操作函数:`strcat`、`strcpy`和`strcmp`,并提供它们的实现细节。 1. **`strcat`函数**: `strcat`函数用于将一个字符串连接到另一个字符串的末尾。它的原型是: ```c char *...

    C程序_不调用库函数,实现strcpy函数

    `strcpy`是C语言中一个非常重要的字符串操作函数,它用于将一个源字符串复制到目标字符串中,其原型通常定义在`&lt;string.h&gt;`头文件中,形如:`char *strcpy(char *dest, const char *src);`。函数的主要功能是从`src`...

    SIMATIC Wincc中与字符串相关的函数使用方法(拷贝_比较_连接_转换)及举例说明.docx

    1. **strcpy()**:这个函数用于拷贝一个字符串到另一个字符串。在示例中,`pszValue` 的值被复制到 `a` 中。`strcpy()` 需要谨慎使用,因为它不检查目标字符串的长度,可能导致缓冲区溢出。为了安全起见,通常推荐...

    C语言写字符串函数及任意个数求和

    C语言本身并不像其他高级语言那样内置了丰富的字符串操作函数,但通过标准库中的`&lt;string.h&gt;`我们可以使用一些基本的字符串函数,如`strcpy`、`strlen`等。然而,为了更好地理解和掌握C语言,有时我们需要自己动手...

    C语言字符串函数大全C/C++基础 字符串操作大全

    `strcat` 函数用于将一个字符串添加到另一个字符串的末尾,从而实现字符串的拼接。 #### 用法 ```c char *strcat(char *destin, char *source); ``` 这里 `destin` 表示目标字符串,`source` 表示要添加到目标字符...

    C语言字符串操作函数.docx

    ### C语言字符串操作函数知识点详解 #### 一、strtok() — 字符串分割函数 - **功能**:`strtok()` 函数用于将一个字符串按照指定的分隔符分割成多个子字符串,并返回第一个子字符串。 - **语法**: ```c char *...

    求字符串长度、比较字符串 、复制 、连接——C语言程序

    在C语言中,字符串操作是非常重要的一部分,它包括求字符串长度、比较字符串、复制字符串和连接字符串等操作。下面,我们将详细介绍这些操作的实现方法和原理。 1. 求字符串长度 在C语言中,求字符串长度可以使用...

    C语言字符串操作函数.doc

    strcpy函数是C语言中的一个基本函数,用于将源字符串拷贝到目标字符串中。该函数的声明为:`char *strcpy(char *dest, const char *src);`其中,dest是目标字符串的指针,src是源字符串的指针。strcpy函数将源字符串...

    C语言实现字符串循环右移

    本文详细介绍了如何在C语言中实现字符串的循环右移,包括了两种不同的实现方法:一种使用字符串复制函数 `strcpy`,另一种使用内存拷贝函数 `memcpy`。每种方法都有其适用场景,开发者可以根据实际需求选择最适合的...

    wincc字符串函数大全

    WinCC 字符串函数大全是 WinCC 软件中的一个重要组件,它提供了一系列的字符串函数,用于处理和操作字符串。这些函数可以用来拷贝字符串、拼接字符串、查找字符串中的字符、比较字符串等。 1. stpcpy 函数 stpcpy ...

    字符串处理函数

    字符串处理函数是指对字符串进行操作和处理的函数集合,它们可以实现字符串的拷贝、连接、比较、搜索、提取、修改等操作。在 C 语言中,字符串处理函数是非常重要的,以下是常用的字符串处理函数: 1. 字符串拷贝...

    字符串函数实现

    自己实现的部分字符串操作函数,基本实现了其功能

    在C语言函数中调用汇编语言程序实现字符串的拷贝

    在C语言中,我们通常使用标准库函数如`strcpy`来拷贝字符串。然而,在某些特定情况下,如优化性能或理解底层操作,我们可能需要直接调用汇编语言程序来实现这一功能。在这个主题中,我们将探讨如何在C语言函数中嵌入...

    自己写的字符串函数代码

    在这个“自己写的字符串函数代码”压缩包中,我们可以期待找到一些作者自定义的字符串处理函数,这些函数可能实现了常见的字符串操作,例如复制、比较、连接、查找子串等。 首先,让我们来看看标题提到的“不用库...

    字符串相关函数实现(自己编写的)

    在这个主题中,我们聚焦于一个自定义实现的字符串函数库,它包括了字符串的复制、查找、对比和连接等基本操作。下面将详细讨论这些功能及其在实际编程中的应用。 首先,字符串复制是常见的操作,通常由`strcpy`或`...

    字符串处理函数列表,字符串处理函数列表

    字符串处理函数是编程语言中非常重要的...这些函数涵盖了从基本的字符串比较、复制到复杂的查找、连接以及字符串操作等多个方面,是处理文本数据的基础。理解并熟练运用这些函数能够帮助开发者高效地处理字符串任务。

Global site tag (gtag.js) - Google Analytics