问题描述
将一句话的单词进行倒置,标点不倒置。比如 "I like beijing.",经过处理后变为:"beijing. like I"。
字符串长度不超过100。
输入描述:
输入一个仅包含小写字母、空格、'.' 的字符串,长度不超过100。
'.' 只出现在最后一个单词的末尾。
输出描述:
依次输出倒置之后的字符串,以空格分割。
示例1
输入
I like beijing.输出
beijing. like I
算法思路
通过题目描述可以了解到,该题是字符串的部分倒置,即我们可以把这个字符串拆成两个部分
部分一:
在该部分我们可以通过一个循环来首先将上面的字符串全部倒置处理得到下面的字符串。
部分二:
通过将上面的字符串进行第二次倒置,得到下面的字符串。
算法实现
上面通过对题目分析的到的思路,可以通过以下代码来实现
部分一:
void found(char *left,char*right)
{
char tmp = *left;
while (left < right)
{
tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
我们可以通过编写一个这样的函数,来实现字符串的整体倒置。函数体内通过调用指针变量来寻找字符数组的首尾元素,依次进行交换。
部分二:
char* count = ch; char* p0 = ch; while (*count) { while (*count != ' '&& *count != '\0') { count++; } found(p0,count-1); p0 = count+1; count++; }
通过定义两个指针变量,count用来控制空格和结束的判断,p0用来实现字符串的倒置,这样就可以实现第二部分的部分倒置。
代码展示
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> void found(char *left,char*right) { char tmp = *left; while (left < right) { tmp = *left; *left = *right; *right = tmp; left++; right--; } } int main() { int i = 0; char ch[100] = { 0 }; gets(ch); int len = strlen(ch); found(ch, ch + len - 1); char* count = ch; char* p0 = ch; while (*count) { while (*count != ' '&& *count != '\0') { count++; } found(p0,count-1); p0 = count+1; count++; } for (i = 0;i < len;i++) { printf("%c", ch[i]); } return 0; }
总结
以上就是对字符串部分倒置的实例展示,如果对你有帮助的话,请支持一下。