目录
1.字符串全部逆序
- 字符串倒着打印
- 创建一个新数组,将原数组的最后一个元素依次放在放在新数组中
这两种方法都不会使得原字符串发生变化,那么要想完全改变一个数组,就需要用到下面这一种
-
利用指针将原数组的首位与末尾依次替换,从而改变数组本身
2.字符串部分逆序
以字符串“hello csdn.”为例,逆序的结果应该是“.csdn hello”。思路分为两步:
- 逆序整个字符串
- 逆序每一个单词
3.程序设计
1.字符串全部逆序
1.倒序打印
int main()
{
char str[] = "abcdef";
int len = strlen(str);
int j = len - 1;
for (j; j >= 0; j--)
{
printf("%c", str[j]);//倒序打印每一个字符
}
return 0;
}
2.创建新数组存放逆序结果
int main()
{
char arr1[] = "abcdef";
char arr2[10] = { 0 };
int len = strlen(arr1) - 1;
int i = len;
int j = 0;
for (i = len; i >= 0; i--)
{
arr2[j] = arr1[i];
j++;//保证字符串末尾存在终止字符‘\0’
}
arr2[j] = '\0';
printf("%s\n", arr2);//arr2逆序
printf("%s", arr1);//arr1保持不变
}
3.利用指针改变数组本身
int main()
{
char arr[] = "abcdef";
int len = strlen(arr) - 1;
char* left = arr;//数组首位
char* right = arr + len;//数组末位
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++, right--;
}
printf("%s\n", arr);
return 0;
}
2.字符串部分逆序
void reverse(char* left, char* right)
{
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char arr[100];
gets(arr);
int len = strlen(arr) - 1;
reverse(arr, arr + len);//1.逆序整个字符串
char* start = arr;
char* end = arr;
//2.开始逆序单词
while (*start)//即(*start != '\0')
{
while (*end != ' ' && *end != '\0')
{
end++;
}
if (*end == ' ')
{
reverse(start, end - 1);
end++;//跳过当前字符
start = end;
}
else
{
reverse(start, end - 1);
start = end;
}
}
printf("%s\n", arr);
return 0;
}

1万+

被折叠的 条评论
为什么被折叠?



