经典算法面试题目-翻转一个C风格的字符串(1.2)
题目:
Write code to reverse a C-Style String. (C-String means that “abcd” is represented as five characters, including the null character.)
写代码翻转一个C风格的字符串。(C风格的意思是”abcd”需要用5个字符来表示,包含末尾的 结束字符)
解答:
这道题如果就是要考察你有没有注意到C风格字符串最后的那个结束符,那我觉得还是像书 上写的那样,在代码中有所体现。代码如下:
博主表示对这个第一种方法有点懵逼,有懂的大神麻烦教导一下,O(∩_∩)O谢谢。指针方面,我基本上没怎么学~~~
void swap(char &a, char &b){
a = a^b;
b = a^b;
a = a^b;
}
void reverse1(char *s){
if(!s) return;
char *p = s, *q = s;
while(*q) ++q;
--q;
while(p < q)
swap(*p++, *q--);
}
否则的话,可以直接获取字符串的长度,然后从两头开始一一交换相应的字符。代码如下:
void swap(char &a, char &b)
{
a = a^b;
b = a^b;
a = a^b;
}
void reverse2(char *s)
{
int n = strlen(s);
for(int i=0; i < n/2; ++i)
swap(s[i], s[n-i-1]);
}
完整代码如下:
#include <iostream>
#include <cstring>
using namespace std;
void swap(char &a, char &b){
a = a^b;
b = a^b;
a = a^b;
}
void reverse2(char *s){
int n = strlen(s);
for(int i=0; i<n/2; ++i)
swap(s[i], s[n-i-1]);
}
void reverse1(char *s){
if(!s) return;
char *p = s, *q = s;
while(*q) ++q;
--q;
while(p < q)
swap(*p++, *q--);
}
int main(){
char s[] = "1234567890";
reverse1(s);
cout<<s<<endl;
return 0;
}
我对第一种方法的理解:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
void swap(char &a, char &b){
a = a^b;
b = a^b;
a = a^b;
}
void reverse2(char *s){
int n = strlen(s);
for(int i=0; i<n/2; ++i)
swap(s[i], s[n-i-1]);
}
void reverse1(char *s){
if(!s) return;
printf("%d\n",s);//s是一个地址
char *p = s, *q = s;
printf("%d\n",p);
printf("%d\n",*p);//*p代表当前地址的一个字符
while(*q){//遇到结束符的时候*p的值是0
++q;
printf("p=%d*\n",q);
printf("*p=%d*\n",*q);
//最后一个是字符串的结束符
}
--q;
printf("*%d*\n",q);//此时的q为结束符之前的一个字符
//此时q指向结束,p是指向开头
while(p < q)//一直交换,直到中间位置
swap(*p++, *q--);
}
int main(){
char s[] = "abcdefghi";
reverse1(s);
cout<<s<<endl;
return 0;
}
详细解释下c风格字符串:
c风格的字符串是用数组存放的,一般要以’\0’结束
而c++主要以string类代替,更加高效,且不易出错
例如:string str = “123”;就是c++的风格;
char str[4]=”123”;就是c风格
string是c++中的关键字,和int,float等等一样, 在c++中,string 定义的变量可以直接存储字符串。在C语言中是没有这种直接存储字符串的变量的。
[ ]里面是4,是因为,C风格的字符串,在最后都会默认添加’\0’,所以”123”本质上是1 2 3 ‘\0’
它其实是占四个字节。所以如果你只定义3个存储空间的话,那’\0’这个字符串终止标志就回被丢弃,那么以后的应用就回出现问题。举个例子:你用strlen(str)试试查看长度为3时的这个字符串的长度,很可能就会有问题。 ‘\0’ 是c字符串都存在的。
经典算法面试题目-翻转一个C风格的字符串(1.2)的更多相关文章
- 经典.net面试题目(转载)
1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保 ...
- 经典.net面试题目
1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保 ...
- 【转载】经典.net面试题目【为了笔试。。。。。】
. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成员 ...
- 经典.net面试题目(1)
1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保 ...
- 面试题目——《CC150》数组与字符串
面试题1.1:实现一个算法,确定一个字符串的所有字符是否全都不同.假使不允许使用额外的数据结构,又该如何处理? 注意:ASCII字符共有255个,其中0-127的字符有字符表 第一种解法:是<C ...
- JAVA经典算法面试40题及答案
现在是3月份,也是每年开年企业公司招聘的高峰期,同时有许多的朋友也出来找工作.现在的招聘他们有时会给你出一套面试题或者智力测试题,也有的直接让你上机操作,写一段程序.算法的计算不乏出现,基于这个原因我 ...
- 经典.net面试题目(2)
101.在.net(C# or vb.net)中如何取消一个窗体的关闭. 答:private void Form1_Closing(object sender, System.ComponentMod ...
- PHP算法面试题目
1.使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组 //冒泡排序(数组排序) functionbubble_sort($array){ $count = count($array ...
- 经典软件测试面试题目:Android 和 ios 测试区别?这样回答:稳!
Android 和 ios 测试区别? App 测试中 ios 和 Android 有哪些区别呢?1.Android 长按 home 键呼出应用列表和切换应用,然后右滑则终止应用:2.多分辨率测试, ...
随机推荐
- ECMAScript位操作符
在ECMAScript中,有少数的几个操作符可以对二进制位进行直接操作,这几个操作符本身直接对二进制进行操作,所有它们的本身是非常效率的,学习这一段有助于以后的优化以及理解. ECMAScript中采 ...
- 欢迎使用skymvc框架,简单易用的php框架
skymvc是一款轻量.简单易用的php mvc框架,经过多个项目实践改良. 特点: 1.mvc架构 2.m.v.c之间可以互相调用 3.简单的路由控制 R("/index.php" ...
- lnmp安装--php与nginx结合
软件环境: linux:centos5. nginx:.tar.gz php:.tar.gz lnmp与lamp的区别? lnmp(linux+nginx+mysql+php)的提法相对于lamp(l ...
- Hadoop中的RPC
基于hadoop2.6.4,RPC相关的实现位于hadoop-common这个project中hadoop-common-project/hadoop-common/src/main/java的包pa ...
- shell编程的一些例子5
1.here文档 here文档允许我们调用一个交互式程序:可以从脚本程序中输出大量的文本,从而不必echo每行 例子1: #!/bin/bash cat<<!DATA! This is a ...
- Ubuntu 12.04如何从登录界面登录root
root登录,可以使我们拥有管理系统最高的权限,但是随之带来的也是,系统的安全得不到足够的保障.Ubuntu官方资料说不推荐我们以root方式登录到系统中,但是如果我们真想这么做,也是可以的. 不同版 ...
- 用JS实现避免重复加载相同js文件
我们在日常开发过程中,可能有重复加载同一个资源例如:1.js,为了提高性能和用户体验这里我们用原生JS实现同一个资源只加载一次. 下面是 common.js里的JS代码 //使用沙箱模式防止污染外面的 ...
- bzoj2427: [HAOI2010]软件安装
Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和 ...
- leetcode其余题目
1.Largest Rectangle in Histogram http://discuss.leetcode.com/questions/259/largest-rectangle-in-hist ...
- aircrack-ng on OSX 从零开始之探测
继续上一篇内容,在安装好aircrack-ng之后,就要学习如何对目标进行探测了.找了篇教程跟着学习一下吧.其实网上关于使用aircrack-ng的教程还是很多的,我也参考了很多,不过最后还是以官方的 ...