一般面试的时候,如果要考查你的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;
}
分享到:
相关推荐
C语言程序设计-用函数实现字符串的复制, 不允许用strcpy()函数.c
自己实现的部分字符串操作函数,基本实现了其功能
C语言字符串函数大全C/C++基础 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include <stdio.h> #include <string.h> int main(void) ...
编写一个程序,将字符数组s2中的全部字符拷贝到字符数组s1中,不能使用strcpy函数。拷贝时,'\0'也要拷贝过去。 (代码提示:for(i=0;i(s2);i++) s1[i]=s2[i];)
参考字符串函数,有strstr strcat strcpy strcmp等
编写函数void fun(char *s,char *t,char *p)将未在字符串s中出现、而在字符串t中出现的字符, 形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。 例如: 当s为"12345", t为"8624677"时, p...
该程序是我写的博客“一起talk C栗子吧(第六十回:C语言实例--字符串复制)”的配套程序,共享给大家使用
功 能: 拷贝一个字符串到另一个 用 法: char *strcpy(char *destin, char *source); 程序例: C/C++ code #include #include int main(void) { char string[10]; char *str1 = "abcdefghi"; stpcpy(string, str1...
C 语言字符串操作函数 1. 字符串反转 - strRev 2. 字符串复制 - strcpy 3. 字符串转化为整数 - atoi 4. 字符串求长 - strlen 5. 字符串连接 - strcat 6. 字符串比较 - strcmp 7. 计算字符串中的元音字符个...
将字符串str1 拷贝到str2中
【字符串函数】strcpy的使用及原理
C语言学习-字符串处理函数 strcat(char str1,char str2) strcpy(char str1,char str2) strncpy(char str1,char str2,int n) strcmp(char str1,char str2)//比较两个字符串大小str1>str2返回值>0,str1=str2...
嵌入式实验课程中的各项实验如编写strcpy函数: 已知strcpy函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中strDest是目的字符串,strSrc是源字符串。不调用C++/C的字符串库函数,请编写...
实现strcpy,strcpy的功能的实现原理
字符操作及其有关函数实现字符串复制函数: char * my_strcpy(char * dest, const char * src); 字符串拼接函数: char *my_strcat(char *dest, char *src); 实现 memcpy 拷贝:内存拷贝: void * memcpy(void * dest, ...
常见的C字符串处理函数的源代码, 面试必备啊。
已知strcpy函数的原型是char *strcpy(char *strDest,const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。不调用C的字符串库函数,编写函数strcpy.
将一个字符串循环右移的三种方法, 第一种:逐个右移;第二种,调用strcpy()函数;第三种,调用memcpy()函数
使用c语言,编写字符串的strlen,strcat, strcpy,strcmp四个操作
2、以下sstrcpy()函数实现字符串复制,即将t所指字符串复制到s所指内存空间中,形成一个新字符串s。请填空。 void sstrcpy(char *s,char *t) { while(*s++=______);} main() { char str1[100],str2[]="abcdefgh"; s...