#include <stdio.h> void fun( char *a ) { int i=0,n=0; char *p; p=a; while (*p=='*') { n++; /***** 请在以下一行填写代码 *****/ ; } while(*p) { /***** 请在以下一行填写代码 *****/ ; i++; p++; } while(n!=0) { a[i]='*'; i++; /*
时间: 2023-06-26 10:05:16 浏览: 132
请补全代码,使得fun函数能够实现以下功能:将字符串a中的所有*号移到字符串的开头,其余字符保持原有顺序。
补全后的代码如下:
```
#include <stdio.h>
void fun( char *a ) {
int i=0,n=0;
char *p;
p=a;
while (*p=='*') {
n++;
p++;
}
while(*p) {
if (*p == '*') {
a[n] = '*';
n++;
} else {
a[i+n] = *p;
}
i++;
p++;
}
while(n!=0) {
a[i]='*';
i++;
n--;
}
}
```
说明:
1. 第一个while循环用于找到字符串a中*号的数量n,并将指针p指向第一个非*字符的位置。
2. 第二个while循环用于将非*字符移到字符串开头,并将*号移到字符串末尾。
3. 第三个while循环用于将剩余的*号移到字符串末尾。
相关问题
#include<stdio.h> #include<string.h> void fun(char a[]); main() { char a[80]; gets(a); fun(a); puts(a); } void fun(char a[]) { /**********ERROR**********/ int i=0,j; /**********ERROR**********/ while(a[i]!='*')i++; /**********ERROR**********/ while(a[i]=='\0') a[j++]=a[i++]; a[j]='\0'; }改错
下面是改正后的代码:
```c
#include<stdio.h>
#include<string.h>
void fun(char a[]);
int main() {
char a[80];
gets(a);
fun(a);
puts(a);
return 0;
}
void fun(char a[]) {
int i=0, j=0; // 初始化变量j
while(a[i]!='*')i++;
i++; // 跳过“*”
while(a[i]!='\0') {
a[j++]=a[i++];
}
a[j]='\0'; // 添加字符串结束符
}
```
修改的细节如下:
1. 在 `main` 函数中添加 `return 0;` 语句,确保程序正常结束。
2. 在 `fun` 函数中初始化变量 `j`。
3. 在第二个 `while` 循环中,添加条件 `a[i]!='\0'`,确保不会读取到字符串结束符。
4. 在循环结束后,添加字符串结束符 `\0`。
#include <stdio.h> #include <string.h> void fun(char *w,int n) { char t,*s1,*s2; sl=w;s2=w+n-1 while(s]<s2) {t=*sl++:*s1=*s2- *s2=t; int main() { char a[10]="1234567"; char *p=a; fun(p,strlen(P)); puts(p); return 0;
这是一段 C 语言的代码。该代码定义了一个函数 `fun`,该函数的作用是将字符串翻转。具体来说,该函数的输入参数为一个字符串指针 `w` 和字符串的长度 `n`,函数会将字符串中的字符顺序翻转。该函数内部定义了三个变量,分别是字符变量 `t` 和字符指针变量 `s1` 和 `s2`。接着是一个 while 循环,该循环的条件是 `s1 < s2`,循环内部将 `s1` 和 `s2` 所指向的字符交换,直到 `s1` 和 `s2` 相遇。最后,该代码定义了一个 `main` 函数,该函数声明了一个字符串数组 `a` 并初始化,然后调用 `fun` 函数翻转字符串,并输出翻转后的结果。
需要注意的是,该代码有一些语法错误。第一处是在 `fun` 函数内部,`sl` 变量应该是 `s1`;第二处是在 `while` 循环内部,应该使用 `++s1` 和 `--s2` 分别使 `s1` 和 `s2` 指向下一个字符。此外,`main` 函数中的 `strlen(P)` 应该是 `strlen(p)`。修改后的代码如下:
```
#include <stdio.h>
#include <string.h>
void fun(char *w, int n) {
char t, *s1, *s2;
s1 = w;
s2 = w + n - 1;
while (s1 < s2) {
t = *s1;
*s1 = *s2;
*s2 = t;
++s1;
--s2;
}
}
int main() {
char a[10] = "1234567";
char *p = a;
fun(p, strlen(p));
puts(p);
return 0;
}
```
该程序的输出结果为 `7654321`,即将原字符串 `1234567` 翻转后的结果。
阅读全文