面试华为硬件---芯片测试时让当场写了字符串逆序输出函数(C语言);
经调试可运行程序如下(运行环境VS2015):
#include <stdio.h>
#include <stdlib.h>
void func(char*, char*, int);
int main()
{
//char* str="djkdhjsdf";//can't
char str[] = "abcdfhgjgd";//不能用常量指针
char str_out[] = "0";
printf("1:%s\n", str);
func(str, str_out, 10);
printf("2:%s\n", str);
printf("3:%s\n", str_out);
getchar();
return 0;
}
void func(char* str, char *str_out, int a) {
int i;
int j;
str = str + a;
for (i=a; i>0; i--) {
str--;
*str_out = *str;
str_out++;
if (i == 1) { *str_out = '\0'; }//注意字符串结束位
}
str_out = str_out - a;//指针归位
*str = *str_out; //初值
for (j=0; j<a; j++) {//注意字符串结束位
str++; //先加后赋值。防止指针溢出
str_out++;
*str = *str_out;
}
}
主要思想:指针指在原始字符串最后,逆序去除存在另一个指针中,再顺序存入原始指针。
要点一:注意字符串结束符’\0';