//有一个字符串(”abcdefgdddd”),欲将其翻转,返回一个新字符串。
//要求1:请自己定义一个接口(函数),并实现功能;
//要求2:编写测试用例。
int reverse_str(char* instr, char* outstr)
{
int ret = 0;//定义返回值并初始化为正常状态
if (instr == NULL)
{
return -1;//错误状态
}
else
{
outstr = instr;
char* start = outstr;//指向字符串起始位置
char* end = outstr + strlen(outstr) - 1;//指向字符串末尾
char c; //定义中间变量,用于交换
while (start < end)
{
//交换start与end 指向的值
c = *start;
*start = *end;
*end = c;
++start;
--end;
}
printf("%s\n",outstr);
}
return ret;
}
int main()
{
char myinstr[100] = "abcdefgdddd";
char myoutstr[100] = {0};
reverse_str(myinstr,myoutstr);
system("pause");
return 0;
}
由上面的程序执行的内存四区的图可以更清晰的了解指针操作在内存中的变化情况。
需要注意的是:
1 全局区中的数据是不能修改的 ,这就是为什么main中要重新再栈内开辟空间,并将全局区内的字符串拷贝的临时空间(即栈区)。
2 采用两个指针分别指向字符串的首位 。要注意循环条件 ,并且在计算end指针指向的位置时,别忘了c语言风格字符串结尾都有一个‘/0’字符 ,因此要减去1.