假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是: 除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:****ABCDEFG********。在编写函数时,不得使用C语言提供的字符串函数。
时间: 2023-07-23 18:20:51 浏览: 106
好的,这是一个比较简单的字符串处理题目。我们可以使用两个指针,一个指向字符串的头部,一个指向字符串的尾部,然后分别向中间移动指针,遇到*号就跳过,遇到字母就将其复制到前面的位置。具体实现可以参考下面的代码:
```c
void fun(char *h, char *p) {
char *src = h;
char *dst = h;
while (*src == '*') { // 跳过开头的*
src++;
}
while (p > src && *p == '*') { // 跳过结尾的*
p--;
}
while (src <= p) { // 复制非*号的字符
if (*src != '*') {
*dst = *src;
dst++;
}
src++;
}
while (dst <= p) { // 将剩余的位置填充*
*dst = '*';
dst++;
}
}
```
这个函数的思路比较简单,首先跳过字符串头部和尾部的*号,然后将指针src从头部向尾部移动,遇到非*号的字符就复制到指针dst所指的位置。最后,将剩余的位置填充*号即可。
相关问题
假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是将字符串中的前导*号全部移到字符串的尾部。
好的,我可以帮你写这个函数。以下是一个示例实现:
```python
def move_leading_asterisks(s):
# 找到第一个非 * 的字符的下标
i = 0
while i < len(s) and s[i] == '*':
i += 1
# 如果字符串全是 *,直接返回
if i == len(s):
return s
# 将前导 * 移到字符串尾部
return s[i:] + s[:i]
```
这个函数首先通过循环找到第一个非 * 的字符的下标,然后将前导 * 移到字符串的尾部,最后返回新的字符串。如果输入的字符串全是 *,则直接返回原字符串。
2) 假定输入的字符串中只包含字母和*号。请编写函数 fun ,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不要删除,形参 n 给出字符串的长度,形参 h 给出了字符串中前导*号的个
针对这个问题,你可以编写一个Python函数`fun`来实现这个需求。下面是一个简单的例子:
```python
def fun(s, n, h):
# 检查输入是否合法,如果n小于等于0或者h大于n,则无需处理,直接返回原字符串
if n <= 0 or h > n:
return s
# 删除前导的*
start = min(h, n)
s = s[start:]
# 删除尾部多余的*
while s and s[0] == '*':
s = s[1:]
# 如果字符串开始就只有一个*,则保留它
if not s:
return '*'
# 返回处理后的字符串,中间的*号保持不变
return ''.join('*' if c == '*' else c for c in s)
# 示例
input_str = "****hello****"
length = len(input_str)
header_star_count = 4
result = fun(input_str, length, header_star_count)
print(result) # 输出:*hello**
```
这个函数首先检查输入的有效性,然后逐步去掉前导和尾部的*号。注意,在实际应用中,你需要处理字符串中有多个连续*号的情况。
阅读全文
相关推荐
















