题目描述
将一句话的单词进行倒置,标点不倒置。例如:
I like beijing.
–>beijing. like I
输入描述
每个测试输入包含1个测试用例:I like beijing. 输入用例长度不超过100
输出描述
依次输出倒置之后的字符串,以空格分割
程序实现
输入字符串
int main() {
char arr[100] = { 0 };
scanf("%s", arr);
printf("%s", arr); //错误
return 0;
}
输入:
abc def
输出:
abc
原因:%s碰到空格默认字符串结束,所以要用gets
int main() {
char arr[100] = { 0 };
gets(arr);
printf("%s", arr);
return 0;
}
但是需要经过翻转操作,再将翻转后的字符串放进arr
两步翻转法
- 字符串整体逆序
–>.gnijieb ekil I
//1.字符串整体翻转
int len = strlen(arr);
reverse(arr, arr + len - 1);
void reverse(char* left, char* right) {//字符串翻转
while (left < right) {
char tmp = 0;
tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
- 每个单词逆序
–>beijing. like I
//2.每个单词逆序
char* start = arr;
while (*start) {
char* end = start;
while ((*end != ' ') && (*end != '\0')) {
end++;
}//一直取直到遇到空格
reverse(start, end - 1);//翻转单词
if (*end == ' ') {
start = end + 1;//找下一个单词
}
else {
start = end;//到\0了,不继续了,跳出while
}
}