题1.   删除串中指定的字符(做此题时,千万不要开辟新空间,否则面试官可能认为你不适合做嵌入式开发)

参考代码:

void delChar(char* str, char c)
{
int i, j=0;
int len=strlen(str);for(i=0; i<len; i++)if(str[i]!=c) str[j++]=str[i];str[j] = '\0';
}
void main(void){char str[] = "abcdefgh"; // 注意,此处不能写成char *str = "abcdefgh";why??delChar(str, 'c'); printf("%s\n", str);
}

关于这里为什么不能用char *str = "abcdefgh";用了程序编译没错,运行出错。

这是因为char *str = "abcdefgh";这里str指向的是常量字符串,str指向的内容是不能修改的,(str的值是可以修改的,比如再char s[10];str=s;是可以的),因此函数调用后对其指向的字符进行修改是错误的。

再看一个例子:

void stringCopy(char *from,char *to);
void main()
{//char a[] = "I am a teacher.";char b[] = "You are a student.";char *a = "I am a teacher.";
//  char *b = "You are a student.";printf("a= %s\nb=%s\n",a,b);printf("copy string a to b :\n");stringCopy(a,b) ;                       //  实参是指针变量printf("a= %s\nb=%s\n",a,b);
}// 子函数 实现两个字符串的复制void stringCopy(char *from,char *to)     // 形参是指针变量
{for (;*from !='\0';from++,to++){*to = *from;}*to='\0';
}

这里

char *a = "I am a teacher.";      
char *b = "You are a student.";
a,b保存的是常量数据区地址,a,b指向的内容不能被修改
所以函数里面的赋值是不起作用的.
应该改成这样
char a[] = "I am a teacher.";      
char b[] = "You are a student.";
字符串传给字符数组,a,b保存的是栈区地址,这样传进函数就可以修改其内容了.

因为程序修改是数组b 的内容,所以这样也是可以的:

char b[] = "You are a student.";
  char *a = "I am a teacher.";

总结:char * 和char[]都可以用来表示字符串,但两者有很大的不同。其中最主要的不同就是char *所表示的字符串,是不能修改的,而char[]所表示的字符串是可以修改的。

题2:删除字符串中的数字并压缩字符串(神州数码以前笔试题),如字符串”abc123de4fg56”处理后变为”abcdefg”。注意空间和效率。

参考:(下面的算法只需要一次遍历,不需要开辟新空间,时间复杂度为O(N))

void DelNumberOfStr(char* str) 
{
int i, j=0;
int len=strlen(str);
 for(i=0; i<len; i++)
 {
if(str[i]>='0'&&str[i]<='9') 
  ; // continue;
else 
 str[j++]=str[i];
 }
 str[j] = '\0';
}

题3:不开辟用于交换数据的临时空间,如何完成字符串的逆序(在技术一轮面试中,有些面试官会这样问)

void change(char *str)
 {
      int len=strlen(str)
for(int i=0,j=len-1; i<j; i++, j--)
{
str[i]=str[i]^str[j];//a=a^b;
str[j]=str[i]^str[j];//b=a^b;
str[i]=str[i]^str[j];//a=a^b;
}
}

面试题--字符串指针与字符串数组的区别char* st=abc;与char* str[]=abc;的异同相关推荐

  1. C语言补漏:字符串指针与字符数组传参

    字符串指针与字符数组传参 深信服的笔试上被吊打,其中对一道用指针做形参的题目印象十分深刻,借此恶补了一晚上指针,今天总结,以作警示. ​ 试想有如下情形,将一个字符串指针做形参赋值函数修改其字符串,函 ...

  2. 字符串指针——指向字符串的指针

    转载自:字符串指针 字符串指针--指向字符串的指针 C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这在<C语言字符数组和字符串>中已经进行了详细讲解,这里不妨再来演示 ...

  3. 【关于如何输出字符串指针指向字符串地址】

    在研究字符串指针时发现一些与整形数组指针反常的现象,于是决定深入了解一下,以下是本人的拙见,欢迎大佬指正. #include<iostream> using namespace std; ...

  4. C++ 字符串指针与字符串数组

    在做面试100题中第21题时,发现char *astr="abcdefghijk\0";和char astr[]={"abcdefghijk"};有点区别,以前 ...

  5. C++ 字符串指针和字符串指针数组详解

    C++处理字符串有两种方式,即:指针方式和数组方式 数组方式:char a[] = "HelloWorld"; 指针方式:const char* s = "HelloWo ...

  6. 字符串,字符指针,字符串指针,字符数组

    对于指针可能是大多数程序员最痛苦的事,尤其是指针和字符串和数组三者放在一起的时候,经历了几次错误后,我打算总结一下这几者的区别. 字符串:"asdasfsff",c语言中后面有'\0'. 字符数组:A ...

  7. 字符串指针与字符串数组

    C/C++中每一个字符串都以'\0'结尾,以方便找出字符串的尾部.但由于这个特点,会存在额外的开销,不小心导致越界的情况.如下面的代码: char str[10]; strcpy(str," ...

  8. 字符串常量与字符数组的区别和字符串常量易错点

    #include <stdio.h>int main() {const char *p = "abc"; //保存了地址,没有保存内容char str[] = &quo ...

  9. C++通过字符串指针打印字符串

    学习数据结构与算法到哈夫曼树编码时,存储的哈夫曼编码数据无法打印,因为我之定义了一个指向字符串数组的指针,在网上看到了通过字符串指针打印整个字符串数组的方法,记录一下,后面可能会用到! 1 定义一个字 ...

最新文章

  1. codevs——2894 Txx考试(背包)
  2. pytorch统计矩阵非0的个数_PyTorch常见的12坑
  3. 3x3,5x5,7x7卷积核识别效率对比
  4. GC-ALLOC 的另一个重要作用,查内存泄漏
  5. java channelexec_java-使用SSH exec通道调用Shell脚本,但忽略对其他Shell脚本的调用
  6. jquery.form.js插件中ajaxSubmit提交在jquery1.4版本中的应用
  7. python接口自动化(四)--接口测试工具介绍(详解)
  8. ajax里绑定框,Select级联菜单,用Ajax获取Json绑定下拉框(jQuery)
  9. Android 系统(252)---Android:BLE智能硬件开发详解
  10. Go语言实现线程安全访问队列
  11. wordpress如何获得当前用户的头像
  12. html canvas缩放抗锯齿,Html5 canvas drawImage:如何应用抗锯齿
  13. wifi的html页面,笔记本怎么设置wifi
  14. No result defined for action com.lzj.web.action.CustomerAction and result input
  15. php环境下,两种汇率接口,已经测试通过
  16. S3C2440 SDRAM驱动配置编程
  17. unfortunately activity has stopped
  18. 嵌入式 LINUX 应用开发
  19. no-cache,max-age=0,nostore区别及304原理
  20. 12 权重衰退【动手学深度学习v2】

热门文章

  1. C# 不安全代码unsafe详解
  2. 2019智能网联汽车驾驶大赛(广州)暨2019智能网联汽车技术大会闭幕!
  3. js 获取扫码枪输入值 监听扫码枪输入事件
  4. ubantu 黑屏_解决方案:iphone xr突然出现黑屏死机
  5. JavaScript脚本编辑器
  6. dd-mon-yy字符串转时间
  7. c++ qt5 打开文件夹
  8. MATLAB绘制泰勒图(10个以上model)
  9. Cocos Creator Touch事件与Unity3D Touch事件
  10. Java中List初始化(亲测)