1.利用数组和返回指针的函数进行字符反转。
#include <iostream>
using namespace std;
int main(void) {
char str[]= "hello world!";
char *strReverse(char *str);
cout << strReverse(str) << endl;// 输出
system("pause");
return 0;
}
//字符串反转
char *strReverse(char *str) {
// 判断字符是否为null或是空字符串
if (str == NULL || str == '\0') {
return str;
}
// 定义char数组指针
char *start = str;
char *end = str;
while (*end != '\0') {//指向最后一个结点
end++;
}
// 交换头和尾的值
char temp;
--end;// 去除\0的位置
while (start < end) {
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
return str;
}
程序执行结果如图:
1.2翻转一句话,但是不翻转整个单词,解法一:利用例题1的反转字符串,先翻转完整句话,然后把每个反转的单词再次翻转就可以实现目的,
#include <iostream>
using namespace std;
char *strReverse(char *str) {
// 判断字符是否为null或是空字符串
if (str == NULL || str == '\0') {
return str;
}
// 定义char数组指针
char *start = str;
char *end = str;
while (*end != '\0') {//指向最后一个结点
end++;
}
// 交换头和尾的值
char temp;
--end;// 去除\0的位置
while (start < end) {
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
return str;
}
// 扩展版反转
char * strReverseEx(char *str) {
// 判断字符是否为null或是空字符串
if (str == NULL || str == '\0') {
return str;
}
// 先整体反转
strReverse(str);
// 定义char数组指针
char *start = str;
char *end = str;
while (true)
{ // 然后根据空格分单词反转
if (*end == ' ')
{
*end = '\0';
strReverse(start);
*end = ' ';
start = end + 1;
}
// *end=='\0',说明到了字符串结尾
if (*end == '\0')
{
strReverse(start);
break;
}
end++;
}
return str;
}
int main(void) {
char str[] = "Welcome to Sun Yat-sen University";
cout << strReverseEx(str) << endl;// 输出
system("pause");
return 0;
}
程序执行结果如图;
例题1.2,解法二:利用栈实现上述目标: