题目:

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. Codevs 1074 食物链 2001年NOI全国竞赛

    1074 食物链 2001年NOI全国竞赛 时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 动物王国中有三类动物 A,B ...

  2. Batch file Functions

    Quote from: http://ss64.com/nt/syntax-functions.html Batch file Functions Packaging up code into a d ...

  3. 设计模式之 Factory Method 工厂方法

    看到的比较有意思的一篇描述工厂方法的文章. http://www.codeproject.com/Articles/492900/From-No-Factory-to-Factory-Method 总 ...

  4. js传带参数的函数

    字符串: setTimeout('pageScroll(4)',100);

  5. 玩转HTML5移动页面(动效篇)

    原文:http://www.grycheng.com/?p=458 作为一名前端,在拿到设计稿时你有两种选择: 1.快速输出静态页面 2.加上高级大气上档次狂拽炫酷屌炸天的动画让页面动起来 作为一个有 ...

  6. C++ 11 笔记 (五) : std::thread

    这真是一个巨大的话题.我猜记录完善绝B需要一本书的容量. 所以..我只是略有了解,等以后用的深入了再慢慢补充吧. C++写多线程真是一个痛苦的事情,当初用过C语言的CreateThread,见过boo ...

  7. XCode 项目配置说明

    初学XCode最让人头疼的就是项目各属性设置,各种不解,这里做个总结: 项目配置: 基本项(Basic) 1.Architectures(指令集)——设置你想支持的指令集,目前ios的指令集有以下几种 ...

  8. 排名第一、第二的OCR软件

    排名第一.第二的OCR软件 第一:ABBYY FineReader      OCR世界排名第一,在俄罗斯获国际科技大奖奖超过卡巴斯基! 不仅仅只是文字识别,还能表格识别,版面还原,字体识别,文档结构 ...

  9. spoj VFMUL FFT快速傅立叶变换模板题

    题意:求两个数相乘. 第一次写非递归的fft,因为一个数组开小了调了两天TAT. #include<iostream> #include<cstring> #include&l ...

  10. XSS测试用例与原理讲解

    1.<a href="javascript:alert(32)">DIBRG</a>2.<img href="javascript:aler ...