移动字符串c语言将*移动到前面
时间: 2023-11-21 21:06:07 浏览: 155
以下是一种基于双指针的实现方法:
```c
void moveStarToFront(char* str) {
int len = strlen(str);
char* left = str;
char* right = str + len - 1;
while (left < right) {
while (*left != '*' && left < right) {
left++;
}
while (*right == '*' && left < right) {
right--;
}
if (left < right) {
// 交换 left 和 right 指向的字符
char temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
}
}
```
该函数接受一个字符串指针 `str`,并将其中的 `'*'` 字符尽可能地移动到前面。具体实现中,我们使用两个指针 `left` 和 `right` 分别指向字符串的首尾,然后不断扫描字符串,找到一个 `left` 指向的非 `'*'` 字符和一个 `right` 指向的非 `'*'` 字符,然后交换它们。这样一轮扫描后,一个 `'*'` 字符就被移动到了左侧。重复执行这个过程,直到 `left` 和 `right` 指针相遇为止。这个算法的时间复杂度是 $O(n)$,其中 $n$ 是字符串的长度。
阅读全文