字符串s中只能存入字母和*,利用指针的方式将s中的*全部移动到字母的尾部。例如5 中输入***abcd***ef,处理后输出S 为 abcdef******。下方给出主两数,大家需要写出 fun 西数。要求用指针的形式,不用下标的形式。
时间: 2023-09-05 16:07:53 浏览: 100
C语言链表实现字符串输入、查找、删除等
以下是一个可能的实现:
```c++
void moveStarsToEnd(char* s) {
char* p1 = s;
char* p2 = s;
while (*p2) { // 找到字符串s的末尾
p2++;
}
while (p1 < p2) {
if (*p1 == '*') { // 如果当前字符是'*'
char* tmp = p1;
while (tmp < p2) { // 找到下一个非'*'的字符
if (*tmp != '*') {
break;
}
tmp++;
}
if (tmp == p2) { // 如果后面全是'*',则已经完成移动
break;
}
*p1 = *tmp; // 将下一个非'*'的字符移到当前位置
*tmp = '*'; // 将当前位置置为'*'
}
p1++;
}
}
```
该函数使用两个指针 `p1` 和 `p2`,初始都指向字符串 `s` 的开头。`p2` 指向字符串的末尾,即最后一个字符的下一个位置。在第一个 while 循环中,找到字符串 `s` 的末尾位置。在第二个 while 循环中,不断移动 `p1`,如果当前字符是 `*`,则从 `p1` 开始向后找到下一个非 `*` 的字符,将其移到当前位置,同时将当前位置置为 `*`。这样,每次移动 `p1`,都会将一个 `*` 移动到字符串的末尾。最后,当 `p1` 到达 `p2` 时,所有的 `*` 都已经移动到了字符串的末尾。
阅读全文