反转字符串及其字串,分别实现:hello world=>dlrow olleh 和 hello world=>world hello
思路:
顺序反转:利用指针对撞思想,分别从前往后和从后往前遍历,并交换字符。
子串反转:从最后一个字符开始往前遍历,遇到空格,把该段复制到结果字符串中,第一个子串,在循环结束后在加入结果字符串。
//reverse.cpp
#include<stdio.h>
#include<string.h>
void reverse(char str[])
{//顺序反转 hello world=>dlrow olleh
for(int i=0,j=strlen(str)-1;i<=j;i++,j--)
{
char ch = str[i];
str[i] = str[j];
str[j] = ch;
}
}
void reverse_substring(char str[])
{//字串反转 hello world=>world hello
int len = strlen(str);
char result[len];
int j,k=len-1,t=0;
for(j=len-1;j>=0;j--)
{
if(str[j]==' ')
{
for(int i=j+1;i<=k;i++,t++)
{
result[t] = str[i];
}
result[t++] = str[j];
k=j-1;
}
}
for(int i=0;i<=k;i++,t++)
result[t]=str[i];
result[len] = '\0';
strcpy(str,result);
}
int main()
{
char str[] = "hello world";
char str2[] = "he";
reverse(str2);
reverse_substring(str);
printf("%s\n",str2);
printf("%s\n",str);
return 0;
}