1.整个字符串逆序
要想实现字符串的逆序就要想办法将字符进行调换,可以通过控制下标来调换字符,类似于之前的泡沫排序法,都是设出了左右坐标:
//版本一,用数组做形参
//void Reverse(char ch[], int len)
//{
// int left = 0;
// int right = len - 1;
// int i = 0;
// while (left < right)
// {
// char temp = ch[right];
// ch[right] = ch[left];
// ch[left] = temp;
// left++;
// right--;
// }
}
//版本二:用指针做形参
void Reverse(char* ch, int len)
{
char* left = ch;
char* right = ch + len - 1;
while (left < right)
{
char temp = *left;
*left = *right;
*right = temp;
right--;
left++;
}
}
int main()
{
char ch[] = "abcdefghi";
int len = strlen(ch);
Reverse(ch,len);
printf("%s", ch);
return 0;
}
2.单词本身不逆序,只将单词的排列顺序逆序:
可以先考虑将单个的单词字母逆序,然后将整个字符串逆序:
int main()
{
char ch[] = "abcd efgh ijhk.";
char* left = ch;
char* right = ch + strlen(ch) - 1;
//逆序单个单词
char* start = ch;
char* end = start;
while (*end != '\0')
{
while (*end != ' ' && *end != '\0')
{
end = end + 1;
}
char* ret = end - 1;
while (ret > start)
{
int temp = *start;
*start = *ret;
*ret = temp;
ret--;
start++;
}
if (*end == '\0')
start = end;
else
start = end + 1;
end = start;
}
//逆序整个字符串
while (left < right)
{
char temp = *left;
*left = *right;
*right = temp;
right--;
left++;
}
printf("%s\n", ch);
}