笔试题总结之字符串篇(C/C++)
2012-03-25 22:08
246 查看
//字符串的拷贝
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;
}
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;
}
相关文章推荐
- (笔试前准备)字符串匹配算法总结
- windows编程中的单字符和宽字符使用 总结
- Linux字符设备驱动总结程序(二)
- web中的字符问题总结
- 字符透明编程自总结
- 字符数组,字符指针,字符串常量以及其sizeof的一些总结
- 搜狗2015前端工程师笔试题总结
- 微软笔试总结之C++中char * 和 char []的区别,以及堆、栈
- yulong通讯笔试总结(1)
- 腾讯实习生笔试面试总结(1)
- 搜狗2015java工程师笔试题总结
- 腾讯实习生笔试面试总结(2)
- java字符串判空判等总结
- jquery判断字符串中是否包含特定字符的方法总结
- 字符串、字符数组、数组、指针关系总结
- python每次处理固定个数的字符的方法总结
- Linux字符设备驱动总结
- python 处理中文遇到的编码问题总结 以及 字符str的编码如何判断
- WEB开发中的JAVA字符编码经验总结
- 总结下2016年的笔试题