字符串倒置(腾讯笔试题)
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
#include "stdio.h"
#include "string.h"
//方法1,使用双指针
//void reverse(char arr[], int left, int right){
// while (left < right){
// char temp = arr[left];
// arr[left] = arr[right];
// arr[right] = temp;
// right--;
// left++;
// }
//}
//
//
//int main(){
// char arr[1000] = {0};
// gets(arr);
// int len = strlen(arr);
// reverse(arr,0,len-1);
// int left = 0;
// while (left < len){
// int right = left;
// while (arr[right] != ' ' && right<len){
// right++;
// }
// reverse(arr,left,right-1);
// left = right+1;
// }
// printf("%s\n", arr);
// return 0;
//}
//方法2. 直接使用地址操作
void reverse(char *start, char *end){
while (start < end){ //start != end不行,因为可能是偶数
char temp = 0;
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
int main(){
char arr[1000] = {0};
gets(arr);
int len = strlen(arr);
reverse(arr,arr+len-1);
char *left = arr;
while (*left != '\0'){
char *right = left;
while (*right != ' ' && *right != '\0'){
right++;
}
reverse(left,right-1);
if(*right != '\0'){
left = right+1;
} else{
left = right;
}
}
printf("%s\n", arr);
return 0;
}