题目:

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)的更多相关文章

  1. 经典.net面试题目(转载)

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private :   私有成员, 在类的内部才可以访问. protected : 保 ...

  2. 经典.net面试题目

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private :   私有成员, 在类的内部才可以访问. protected : 保 ...

  3. 【转载】经典.net面试题目【为了笔试。。。。。】

    . 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成员 ...

  4. 经典.net面试题目(1)

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private :   私有成员, 在类的内部才可以访问. protected : 保 ...

  5. 面试题目——《CC150》数组与字符串

    面试题1.1:实现一个算法,确定一个字符串的所有字符是否全都不同.假使不允许使用额外的数据结构,又该如何处理? 注意:ASCII字符共有255个,其中0-127的字符有字符表 第一种解法:是<C ...

  6. JAVA经典算法面试40题及答案

    现在是3月份,也是每年开年企业公司招聘的高峰期,同时有许多的朋友也出来找工作.现在的招聘他们有时会给你出一套面试题或者智力测试题,也有的直接让你上机操作,写一段程序.算法的计算不乏出现,基于这个原因我 ...

  7. 经典.net面试题目(2)

    101.在.net(C# or vb.net)中如何取消一个窗体的关闭. 答:private void Form1_Closing(object sender, System.ComponentMod ...

  8. PHP算法面试题目

    1.使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组 //冒泡排序(数组排序) functionbubble_sort($array){       $count = count($array ...

  9. 经典软件测试面试题目:Android 和 ios 测试区别?这样回答:稳!

    Android 和  ios 测试区别? App 测试中 ios 和 Android 有哪些区别呢?1.Android 长按 home 键呼出应用列表和切换应用,然后右滑则终止应用:2.多分辨率测试, ...

随机推荐

  1. 国庆第七日(2014年10月7日17:55:56),随手记,一些关注的OSC软件,花生壳

    (1)最难过的是今天. (2)随手记:001.002. (3)htmlunit.joda-time.date4j.jdao.BeanGenerator.JavaScript秘密花园(开源图书)  OS ...

  2. 结合实例分析简单工厂模式&工厂方法模式&抽象工厂模式的区别

    之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个 ...

  3. ubuntu desktop 开机 连接网络

    参考   http://linux.net527.cn/Ubuntu/Ubuntuanzhuangyuyingyong/2490.html

  4. redis 安装及配置

    一.安装Redis 1.到官网下载redis最新版本,我下载的是 http://redis.io/ 2.拷贝redis-3.0.3到/usr/local目录 3.解压缩sudo tar -zxf re ...

  5. Jquery EasyUI中treegrid的中右键菜单和一般按钮同时绑定事件时的怪异事件

    做个项目使用jquery  easyui来做前端,也许是对此不是很熟悉,总是发现一些不可理解的事件. 主要源代码如下: <script type="text/javascript&qu ...

  6. thinkphp ajax检测是否数据可用

    模板文件:如 index.html 模板文件如:(index.html) <form><input type="text" name="username ...

  7. markdown与textile之间互相转换

    markdown与textile之间互相转换 redmine中默认使用的是textile那么从别的地方复制过来的markdown格式的内容需要进行转换 找到一款工具叫做pandoc http://jo ...

  8. 解决IE6下不支持 png24的透明图片问题

    常用的两种解决方案: 第一:使用IE滤镜解决 关键代码: css代码  _background:none;_filter:progid:DXImageTransform.Microsoft.Alpha ...

  9. 在Django中使用Mako模板

    用了一个月后,终于忍受不了Django的模板了.主要原因是模板内不能运行原生的python语句,所以用起来总感觉被人绑住手脚,遍历个字典都要搞半天. 所以决定用第三方的模板.查了一下,django用的 ...

  10. 监听div内容改变

    做前端突击队,外星人那道是自己手动模拟那个时间的变化的,但正确思路应该是监听div内容的变化然后同步到输入框中,遂今天找了一下,结果如下: $('div').bind('DOMNodeInserted ...