编写函数将字符串中的前导*号全部移到字符串的尾部.请用C语言回答。
时间: 2023-12-05 20:04:46 浏览: 154
下面是一个将字符串中的前导 "*" 全部移到字符串尾部的函数示例:
```c
#include <stdio.h>
#include <string.h>
void move_star_to_end(char* str) {
int len = strlen(str);
int i, j;
// 找到第一个非 * 字符的位置
i = 0;
while (str[i] == '*') {
i++;
}
// 将前导 * 移到尾部
for (j = i; j < len; j++) {
if (str[j] != '*') {
str[i++] = str[j];
}
}
for (; i < len; i++) {
str[i] = '*';
}
}
int main() {
char str[] = "***hello**world***";
move_star_to_end(str);
printf("%s\n", str);
return 0;
}
```
输出结果为:
```
helloworld******
```
相关问题
用C语言编写函数将字符串中的前导*号全部移到字符串的尾部,程序包含指针
好的,可以使用指针实现该函数。下面是一个示例代码:
```c
#include <stdio.h>
void move_star(char *str) {
char *p = str;
char *q = str;
while (*p) {
if (*p != '*') {
*q++ = *p;
}
p++;
}
while (*q) {
*q++ = '*';
}
}
int main() {
char str[] = "***hello*world**";
printf("Original string: %s\n", str);
move_star(str);
printf("Modified string: %s\n", str);
return 0;
}
```
该函数的实现思路是:使用两个指针p和q,初始都指向字符串的首字符。遍历整个字符串,如果p指向的字符不是星号,则将其移动到q指向的位置,并将q向后移动一个位置;否则只将p向后移动一个位置。最后,将q指向的位置及其后面的所有字符都改为星号即可。
注意,此处的字符串是以字符数组的形式传递给函数的,因此需要在函数内部修改该字符数组。如果需要修改传入的字符串,可以将函数参数改为指向字符数组的指针。
用c语言编写程序做答,假定输入的字符串中只包含字母和*号,将字符串的前导*号全部移到字符串的尾部,字符串中间的*不需要改变位置。 例如:通过键盘输入***abcd**efg*,程序执行后输出:abcd**efg****
以下是可行的 C 语言程序代码:
```
#include<stdio.h>
#include<string.h>
void move_asterisks(char* str)
{
int len = strlen(str);
int count = 0;
for(int i = 0; i < len; i++)
{
if(str[i] == '*')
count++;
else
str[i-count] = str[i];
}
for(int i = len - count; i < len; i++)
str[i] = '*';
}
int main()
{
char str[100];
printf("Please input the string: ");
gets(str);
move_asterisks(str);
printf("After moving: %s\n", str);
return 0;
}
```
代码解析:
首先通过 `gets()` 函数获取输入的字符串。然后定义一个 `move_asterisks()` 函数,它的作用是把字符串中所有前导的 `*` 移动到字符串的末尾。我们定义字符串的有效长度为 `len`,定义一个计数器 `count` 来统计前导的 `*` 的个数。对于字符串中的每个字符,如果它是 `*`,则让计数器 `count` 自增;否则,就将它向前移动 `count` 个位置,这样就把前导的 `*` 删除掉了。最后,再在字符串的有效部分之后添加 `count` 个 `*` 即可。在主函数中调用这个函数并输出结果。这样,我们就成功地完成了这道题目的求解。
阅读全文