实习整理(十二)
来源:互联网 发布:大数据的技术原理 编辑:程序博客网 时间:2024/04/30 13:48
关于实习笔试,面试这部分感觉都写得差不多了,剩下一些零零碎碎的知识,还是继续写上吧。。。
关于字符串处理:
1、字符串反转reverse
2、字符串复制memcpy
2、字符串复制memcpy
3、内存复制memcpy
1、字符串反转4、字符串长度strlen
5、字符串连接strcat
6、字符串比较strcmp
7、字符串转整数atoi
8、字符串元音字符个数
9、字符串是否回文数
思想:遍历字符串,将第一个字符和最后一个交换,第二个和倒数第二个交换,依次循环。
这道题如果是我的话就会立马选择第一种解法,因为时间是有限制的
注意:
注意:
(1)一般不使用库函数,如strlen、strcpy 等。
(2)如果字符从是const char *str ,那么处理的时候先复制出来。
char* tmp = new char[strlen(str) + 1];
strcpy(tmp,str);
strcpy(tmp,str);
【解法1】:使用另外一个数组,进行逆向复制。空间浪费较多
char * reverse(string s1,char s2[])
{
for(int i=0;i<s1.length();i++)
{
s2[s1.length()-1-i]=s1[i];//反向存储字符
}
return s2;
}
【解法2】:使用一个临时变量,对字符串首尾进行反转。耗费一个变量空间
char *reverse(char *str)
{
char *start, *end;
char temp;
start = end = str;
while(*end++ != '\0');
end -= 2;
while(start<end)
{
temp = *start;
*start++ = *end;
*end-- = temp;
}
return str;
}
{
char *start, *end;
char temp;
start = end = str;
while(*end++ != '\0');
end -= 2;
while(start<end)
{
temp = *start;
*start++ = *end;
*end-- = temp;
}
return str;
}
char *reverse(char *str)
{
char *start, *end;
start = end = str;
while(*end++ != '\0');
end -= 2;
while(start<end)
{
*end ^= *start;
*start ^= *end;
*end ^= *start;
start++;
end--;
}
return str;
}
#include <stdio.h>
#include <assert.h>
char *strcpy( char *dest, const char *src)
{
assert( (dest != NULL) && (src != NULL)); //检查指针有效性
char *destCopy = dest; //保存目的字符串指针起点
}
char *d = dest;
const char *s = src;
while(count--)
*d++ = *s++;
return dest;
}
#include <assert.h>
size_t strlen(const char *src)
{
assert(src !=NULL);
int len = 0;
while(*src++ != '\0')
len++;
return len;
size_t strlen(const char *src)
return destCat;
}
{
char *start, *end;
start = end = str;
while(*end++ != '\0');
end -= 2;
while(start<end)
{
*end ^= *start;
*start ^= *end;
*end ^= *start;
start++;
end--;
}
return str;
}
2、字符串复制。不调用库函数,实现strcpy函数
#include <stdio.h>
#include <assert.h>
char *strcpy( char *dest, const char *src)
{
assert( (dest != NULL) && (src != NULL)); //检查指针有效性
char *destCopy = dest; //保存目的字符串指针起点
while((*dest++ = *src++) != '\0')
; //字符串复制,包括'\0'
return destCopy; //返回目的字符串; //字符串复制,包括'\0'
}
3、内存复制:memcpy
Linux实现:
void *memcpy( void *dest, const void *src, size_t count)
{void *memcpy( void *dest, const void *src, size_t count)
char *d = dest;
const char *s = src;
while(count--)
*d++ = *s++;
return dest;
}
4、字符串求长度。strlen
【解法1】:利用while语句
【解法1】:利用while语句
size_t strlen(const char *src)
{
assert(src !=NULL);
int len = 0;
while(*src++ != '\0')
len++;
return len;
}
【解法2】:无变量版,递归
size_t strlen(const char *src)
{
} if (*src == '\0')
return 0;
else
return (strlen(++src) + 1);
5、字符串连接 //这个程序会出现问题,dest内存不够
#include <assert.h>
char *strcat( char *dest, const char *src)
{
assert( (dest != NULL) && (src != NULL));
char *destCat = dest;
while(*dest != '\0')
dest++;
while((*dest++ = *src++) != '\0');
char *strcat( char *dest, const char *src)
{
assert( (dest != NULL) && (src != NULL));
char *destCat = dest;
while(*dest != '\0')
dest++;
while((*dest++ = *src++) != '\0');
return destCat;
}
或者
int strcmp( const char *src, const char *dst)
{
assert( (src != NULL) && (dst != NULL));
int ret = 0;
while( !( ret = *(unsigned char *)src - *(unsigned char *)dst ) && *src && *dst )
++src,++dst;
if(ret < 0)
ret = -1;
else if(ret > 0)
ret = 1;
return (ret);
}
char * strcat(char *s1,const char *s2)
{
char *s3=new char[10];
int len=0;//用于将指针退回到最开始的地方
while(*s1!='\0')
{
*s3++=*s1++;
len++;
}
while(*s2!='\0')
{
*s3++=*s2++;
len++;
}
return s3-len+1;
}
PS:我觉得这个题目如果没有规定要用指针的话,可能用字符数组会更加适合6、字符串比较
int strcmp( const char *src, const char *dst)
{
assert( (src != NULL) && (dst != NULL));
int ret = 0;
while( !( ret = *(unsigned char *)src - *(unsigned char *)dst ) && *src && *dst )
++src,++dst;
if(ret < 0)
ret = -1;
else if(ret > 0)
ret = 1;
return (ret);
}
或者
void strcmp(char *s1,char *s2)
{
int result=0;
while(*s1!='\0'&&*s2!='\0')
{
if((*s1-*s2)>0)
{
result=1;
break;
}
else if((*s1-*s2)<0)
{
result=-1;
break;
}
s1++;s2++;
}
if(*s1=='\0'&&*s2!='\0') result=-1;
else if(*s2=='\0'&&*s1!='\0')result=1;
cout<<result<<endl;
}
0 0
- 实习整理(十二)
- 安卓实习期间整理知识点(十二)
- 金蝶实习(十二)
- 实习日记->第四十二天
- 实习篇---第三十二天
- 实习篇---第五十二天
- 实习整理(一)
- 实习整理(二)
- 实习整理(三)
- 实习整理(四)
- 实习整理(五)
- 实习整理(六)
- 实习整理(七)
- 实习整理(八)
- 实习整理(九)
- 实习整理(十)
- 实习整理(十一)
- 实习整理(十三)
- WCF异步调用模式
- 虚幻4随笔4 从工程开始
- Python中的类方法和静态
- Oracle Interval-Partition 解决Range分区大难题
- 如果Java 失宠于Oracle,那么未来会怎么样?
- 实习整理(十二)
- ios图片加水印或文字
- mac下安装启动Mongodb
- 运维工具大宝典之运维需求篇
- nginx 安装&配置监听端口
- 关于Bitmap的recycle()的理解
- [软件渲染器入门]二,绘制线段和三角形来获得线框渲染效果
- 【centos安装wordpress】要执行请求的操作,WordPress 需要访问您网页服务器的权限。 请输入您的 FTP 登录XXXX”完美解决方法
- PAT 1069. The Black Hole of Numbers (20)