# 笔试题总结之字符串篇（C/C++）

//字符串的拷贝

char* Strcpy(char* strDest, const char* strSrc) {

if(strDest== NULL || strSrc == NULL) {

returnNULL;

}

if(strDest== strSrc) {

returnstrDest;

}

char*strTemp = strDest;

while((*strDest++ = *strSrc++) != '\0');

returnstrTemp;

}

//内存拷贝

void* Memcpy(void* dest, void* src, size_t count)

{

if(dest ==NULL || src == NULL) {

returnNULL;

}

if(dest ==src) {

returndest;

}

char* cdest =(char*)dest;

char* csrc =(char*)src;

//关键，防止拷贝覆盖

if((csrc <cdest) && (csrc+count > cdest)) {

while(count--)

cdest[count] = csrc[count];

} else {

while(count--)

*cdest++ = *csrc++;

}

return dest;

}

//字符串反转

char* reverse_self(char* str, int n) {

if(str ==NULL)

returnNULL;

int low = 0;

int high =n-1;

char ch;

while(low< high) {

ch =str[low];

str[low]= str[high];

str[high] = ch;

++low;

--high;

}

return str;

}

//按单词逆序

char* reverse_by_word(char* str, int n) {

if(str ==NULL)

returnNULL;

str =reverse_self(str, n);

char* p =str;

int cnt = 0;

while(*p) {

if(*p !=' ')

++cnt;

++p;

if((*p == ' ' || *p ==NULL) && cnt > 1) {

reverse_self(p-cnt, cnt);

cnt= 0;

}

}

return str;

}

//整数转化成字符串

char* num_to_str(int num, char* str, int size) {

int cnt = 1;

int temp =num/10;

while(temp){

temp /=10;

++cnt;

}

if(num <0) {

temp =-num;

++cnt;

}

if(size <cnt+1) {

returnNULL;

}

if(num <0) {

num =-num;

str[0] ='-';

}

str[cnt] ='\0';

while(num) {

str[--cnt] = '0' + num%10;

num /=10;

}

return str;

}

//String构造函数

String::String(const char *str)

{

if(str == NULL)//strlen在参数为NULL时会抛异常才会有这步判断

{

m_data = new char[1];

m_data[0] = '\0' ;

} else {

m_data = newchar[strlen(str) + 1];

strcpy(m_data,str);

}

}

//拷贝构造函数

String::String(const String &another)

{

m_data = newchar[strlen(another.m_data) + 1];

strcpy(m_data,other.m_data);

}

//赋值操作符

String& String::operator =(const String &rhs)

{

if ( this ==&rhs)//判断自我赋值

return *this ;

delete []m_data; //删除原来的数据，新开一块内存

m_data = newchar[strlen(rhs.m_data) + 1];

strcpy(m_data,rhs.m_data);

return *this ;

}

/* 在母串中查找子串出现次数的代码。*str：母字符串；*s：子字符串*/

int count(char*str,char* s)

{

char* s1;

char* s2;

int count = 0;

while( *str !='\0' )

{

s1 = str;

s2 = s;

while( ( *s2 ==*s1 ) && ( *s2 != '\0' ) && ( *s1 != '\0' ) )

{

s2++;

s1++;

}

if( *s2 == '\0')

count++;

str++;

}

return count;

}

• 本文已收录于以下专栏：

## C/C++ 字符串 总结

1 字符基础 1.1  单字节字符集(single-byte character set(SBCS)) 顾名思义，在这种模式下，所有的字符都只用一个字节表示，常见的如，ASCII 1.2  多字节字符...
• haifengzhilian
• 2014年04月18日 18:29
• 3763

## C/C++经典笔试题

1.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分)int a = 4;(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;...
• demon_evil
• 2008年02月19日 21:29
• 13938

## 2015年终总结——奋斗篇

• zt15732621796
• 2016年02月27日 21:08
• 601

## C/C++字符串笔试知识点及实例

• wangjun_huster
• 2017年03月26日 16:48
• 529

## C++字符串操作笔试题第二波

//1.字符串替换空格：请实现一个函数，把字符串中的每个空格替换成“％20”。 //例如输入“we are happy.”，则输出“we%20are%20happy.”。 #include #inc...
• liuhuiyan_2014
• 2015年07月03日 16:27
• 1442

## c++工程师笔试常见题目总结

• j_shui
• 2016年03月06日 22:04
• 379

## C/C++字符串总结

C/C++字符串总结
• ANvDbg
• 2016年02月02日 16:08
• 784

## 2016届 阿里巴巴校招研发工程师C/C++笔试题--2015.08.23

• u012243115
• 2015年08月23日 14:40
• 6845

## C/C++常见笔试面试题之常考关键字

• owen7500
• 2016年09月28日 19:13
• 1007

## 《C/C++学习指南(语法篇)》 - 关于本书

• iamshaofa
• 2015年03月12日 14:39
• 4987

举报原因： 您举报文章：笔试题总结之字符串篇（C/C++） 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)