【c语言】倒置字符串
将一句话的单词进行倒置,符号不变,用例长度不超过100
思路:
- 逆序整个字符串
- 逆序每个单词
#include <stdio.h>
#include <string.h>
void reverse(char* left, char* right) {
while (left < right) {
//char *tmp = left;//error:中间变量应该存储*left;而不是left,如果tmp作为指针变量与left同指一片内存区域,那么*left改变,*tmp也改变
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main() {
//输入一个字符串
char arr[101] = { 0 };//用例长度不超过100,字符串以'\0'结尾
gets(arr);//不支持但可以使用
// 法二:
// scanf("%[^\n]s", &arr);//表示scanf读取字符串中的内容直到'\n'时停下
// 法三:
// int i = 0;
// int ch = 0;
// while ((ch = getchar()) != '\n') {
// arr[i++] = ch;
// }
int len = strlen(arr);
//逆序整个字符串
reverse(arr, arr + len - 1);//注意最后一个字符的地址表示
//逆序每个单词
char* cur = arr;
while (*cur) {
char* start = cur;
while ((*cur != ' ') && (*cur != '\0')) {
cur++;
}
char* end = cur - 1;
reverse(start, end);
if (*cur != '\0')
cur++;
}
printf("%s\n", arr);
return 0;
}