c语言输入字符串只能是字母,假定输入的字符串中只包含字母和*号。请编写函数 fun(),它的功能是:除了尾部的,:号之外,将字符串 - 赏学吧...
时间: 2023-09-30 20:07:31 浏览: 49
好的,我明白了您的问题。下面是实现您所需功能的C代码:
```c
void fun(char *str) {
int len = strlen(str);
for(int i = 0; i < len - 1; i++) {
if(str[i] == '*' || !isalpha(str[i])) {
for(int j = i; j < len; j++) {
str[j] = str[j + 1];
}
len--;
i--;
}
}
if(str[len - 1] == ':') {
str[len - 1] = '\0';
}
}
```
该函数的参数为一个字符数组,函数中将会处理这个字符数组,使其只包含字母和尾部没有:号,其余的*号和非字母字符都将被删除。具体实现中,我们遍历整个字符串,若发现是*号或非字母字符,则将其删除并将字符数组整体左移,同时长度减1。最后,如果尾部有:号,则将其替换为\0,以保证字符串的正确性。
希望这个代码能够解决您的问题。
相关问题
c语言写假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是将字符串中的前导*号全部移到字符串的尾部。
以下是实现该功能的C语言代码:
```c
void fun(char *str) {
int len = strlen(str);
int i, j;
// 计算前导*号的数量
int count = 0;
for (i = 0; i < len; i++) {
if (str[i] == '*') {
count++;
} else {
break;
}
}
// 移动前导*号到字符串尾部
for (i = 0, j = count; j < len; i++, j++) {
str[i] = str[j];
}
for (i = len - count; i < len; i++) {
str[i] = '*';
}
}
```
该函数的思路是先计算前导*号的数量,然后将非*号字符向前移动,最后将前导*号移到字符串尾部。注意要使用字符串的长度来遍历字符串。
假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有*号。在编写函数时,不得使用c语言提供的字符串函数。
### 回答1:
可以使用循环遍历字符串中的每个字符,如果字符不是*号,则将其加入一个新的字符串中,最终返回这个新的字符串即可。具体实现可以参考以下代码:
```c
void fun(char *str) {
int i, j;
for (i = , j = ; str[i] != '\'; i++) {
if (str[i] != '*') {
str[j++] = str[i];
}
}
str[j] = '\'; // 将新字符串末尾加上结束符
}
```
调用该函数时,传入的参数为需要删除*号的字符串,函数会直接修改该字符串。例如:
```c
char str[] = "a*b*c*d";
fun(str);
printf("%s\n", str); // 输出:abcd
```
### 回答2:
思路:
遍历字符串,每遇到一个*号就将后面的所有字符向前移一位,直到将*号移动到末尾。如果后面没有字符了就直接将*号删除,继续遍历下一个字符。
代码如下:
```python
def fun(s):
i = 0
n = len(s)
while i < n:
if s[i] == '*':
j = i + 1
while j < n and s[j] == '*':
j += 1
if j == n:
s = s[:i]
else:
s = s[:i] + s[j:]
n = len(s)
else:
i += 1
return s
```
使用方法:
```python
s = "ab*c*d***ef***gh***"
print(fun(s))
```
输出结果:
```
abcdefgh
```
时间复杂度为 O(n^2),空间复杂度为 O(1)。
### 回答3:
题目要求在一个字符串中删除所有的星号,我们可以通过遍历字符串的每一个字符找到星号并删除它。但在删除字符时需要注意数组下标的变化。我们可以用一个变量来记录删除星号后的新长度,再用一个循环将字符串前新长度的部分赋值给原字符串,即可完成删除星号的操作。
以下是该题的示例代码:
```python
def fun(s):
new_len = 0
for i in range(len(s)):
if s[i] != '*':
s[new_len] = s[i]
new_len += 1
s[new_len:] = [] # 将多余部分截断
return s
```
该代码首先定义变量`new_len`来表示新字符串的长度,初始化为0。然后遍历原字符串`s`的每一个字符,如果不是星号就将该字符赋值给新字符串对应位置,并将新长度加1。最后将原字符串多余的部分截取掉,返回删除星号后的新字符串。
需要注意的是,字符串在Python中是不可变类型,因此我们需要将字符串转换为列表来进行删除操作。另外,此处的操作是直接修改原字符串的值,所以需要在调用函数时传入可变对象。如果不希望直接修改原字符串,可以在函数内新建一个列表并返回。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)