首页 理论教育 利用字符指针实现字符串拷贝,示例结果

利用字符指针实现字符串拷贝,示例结果

时间:2023-10-29 理论教育 版权反馈
【摘要】:编写一函数,完成一个字符串的拷贝,要求用字符指针实现。在主函数中输入任意字符串,并显示原字符串,调用该函数之后输出拷贝后的字符串。=′\0′)16{17*pb=*pa;18pa++;19pb++;20}21*pb=′\0′;22}程序结果如图7.40所示:图7.40例7.34程序结果图第5行

利用字符指针实现字符串拷贝,示例结果

【例7.31】请编写函数fun,函数功能是:移动一维数组中的内容;数组中有n个整数,要求把下标从0~p(含p,p小于等于n-1)的数组元素平移到数组的最后。

程序内容如下:

1 #include<stdio.h>

2 #define N 80

3 void fun(int*w,int p,int n)

4 {

5  int i,j,k,t=0,b[15];

6  for(j=0;j<=0;j++)

7  {

8   for(i=0;i<p;i++)

9    b[i]=w[i];

10   for(k=1;k<n;k++)

11    w[k-p]=w[k];

12   for(i=0;i<p;i++)

13    w[n-i-1]=b[i];

14  }

15 }

16 void main()

17 {

18  int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

19  int i,p,n=15;

20  printf("The original data:\n");

21  for(i=0;i<n;i++)

22   printf("%3d",a[i]);

23  printf("\n\nEnter p:");

24  scanf("%d",&p);

25  fun(a,p,n);

26  printf("\n The data after moving:\n");

27  for(i=0;i<n;i++)

28   printf("%3d",a[i]);

29  printf("\n");

30 }

程序结果如图7.37所示:

图7.37 例7.31程序结果图

【例题中关键问题说明】

(1)第18~22行给数组a一组数据。

(2)第25行指针变量w指向数组a。

(3)第6~14行先将数组a中a[p-1]之前的元素赋给数组b,然后再将a[p-1]之后的元素往前移p个位置,最后将数组b中的元素赋给数组a的后p个位置。

【例7.32】请编写函数fun,函数功能是:统计一行单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。

程序内容如下:

1 #include<stdio.h>

2 int fun(char*s)

3 {

4  int flag=0,num=0;

5  while(*s)

6  {

7   if(*s==′′)

8   flag=0;

9   else if(flag==0)

10   {

11    num++;

12    flag=0;

13   }

14   s++;

15  }

16  return num;

17 }

18 void main()

19 {

20  char line[80];

21  int num=0;

22  printf("请输入一组字符串:\n");

23  gets(line);

24  num=fun(line);

25  printf("字母个数:%d\n",num);

26 }         //函数体结束

程序结果如图7.38所示:

图7.38 例7.32程序结果图

【例题中关键问题说明】

(1)第20~23行定义了一个一维数组line,然后给数组赋一串字符串。

(2)第24行运行fun函数,将数组line传到fun函数中。

(3)第5行将指针变量s指向数组line。

(4)第5~13行通过循环遍历数组中所有元素,若元素为字符,则num加1。

【例7.33】请编写函数fun,函数功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

程序内容如下:

1 #include<stdio.h>

2 void fun(int m,int*k,int xx[])

3 {

4  int i,j,n=0;

5  for(i=2;i<m;i++){

6   for(j=2;j<=i/2;j++)

7    if(i%j==0)

8    {

9     break;

10    }

11    if(j<=i/2)

12    {

13     xx[n]=i;

14     n++;

15    }

16  }

17  *k=n;

18 }

19 void main()

20 {

21  int m,n,zz[100];

22  printf("\n请输入10-100的整数:");

23  scanf("%d",&n);

24  fun(n,&m,zz);

25  printf("\n小于%d的非素数有%d个:\n",n,m);

26  for(n=0;n<m;n++)

27   printf("%4d",zz[n]);

28  printf("\n");

29 }

程序结果如图7.39所示:

图7.39 例7.33程序结果图

【例题中关键问题说明】

(1)第21行定义了一个指针变量zz。

(2)第24行执行fun函数。

(3)第5~15行通过循环遍历比m小的所有正整数,是否存在m被比m小的正整数所整除,若存在则为非素数。

【例7.34】编写一函数,完成一个字符串的拷贝,要求用字符指针实现。在主函数中输入任意字符串,并显示原字符串,调用该函数之后输出拷贝后的字符串。

程序内容如下:

1 #include<stdio.h>

2 void copy(char*pa,char*pb);

3 void main()

4 {

5  char a[80],b[80];(www.xing528.com)

6  printf("Input string:\n");

7  gets(a);

8  printf("\n Oldstring:%s",a);

9  printf("\n");

10  copy(a,b);

11  printf("\nnewstring:%s\n",b);

12 }

13 void copy(char*pa,char*pb)

14 {

15  while(*pa!=′\0′)

16  {

17   *pb=*pa;

18   pa++;

19   pb++;

20  }

21  *pb=′\0′;

22 }

程序结果如图7.40所示:

图7.40 例7.34程序结果图

【例题中关键问题说明】

(1)第5行定义了两个一维数组a和b。

(2)第7行给数组a输入了一组字符串。

(3)第10行执行copy函数,将函数调用数组a和b。

(4)第13行指针变量pa和pb分别指向数组a和b。

(5)第15~21通过while循环将数组a中数据复制给数组b。

【例7.35】从键盘上输入10个整数存放到一维数组中,将其中最小的数与第一个数对换,最大的数与最后一个数对换。要求:将进行数据交换的处理过程编写成一函数,函数中对数据的处理要用指针方法实现。编程素材有“printf("Input 10 datas:");”和“printf("Output 10 datas:");”以及“printf("%d",...);”,输入数据为:35、20、94、-23、39、-56、100、87、49、12。

程序内容如下:

1 #include<stdio.h>

2 void swap(int*p1,int*p2);

3 void fun(int*p);

4 int main()

5 {

6  int a[10],i;

7  printf("Input 10 datas:");

8  for(i=0;i<10;i++)

9   scanf("%d",&a[i]);

10  fun(a);

11 }

12 void swap(int*p1,int*p2)

 13 {

14  int t;

15  t=*p1;

16  *p1=*p2;

17  p2=t;

18 }

19 void fun(int*pa)

20 {

21  int max,min,i,m,n;max=*pa;

22  min=*pa;

23  for(i=1;i<10;i++)

24   if(max<pa[i])

25   {

26    max=pa[i];m=i;

27   }

28   if(min>pa[i])

29   {

30    min=pa[i];

31    n=i;

32   }

33  swap(&pa[0],&pa[n]);

34  swap(&pa[9],&pa[m]);

35  printf("Output 10 datas:");

36  for(i=0;i<10;i++)

37   printf("%d",pa[i]);

38 }

程序结果如图7.41所示:

图7.41 例7.35程序结果图

【例题中关键问题说明】

(1)第6~9行给数组a赋值一组数据。

(2)第10行fun函数调用数组a。

(3)第19行指针变量pa指向数组a。

(4)第22~28行通过循环遍历出这组数据的最小值和最小值的位置以及这组数据的最大值和最大值的位置。

(5)第30~31行执行swap函数,进行位置交换。

【例7.36】编写一个函数(参数用指针)将一个3×3矩阵转置。

程序内容如下:

1 #include<stdio.h>

2 void fun(int(*pa)[3],int(*pb)[3]);

3 int main()

4 {

5  int a[3][3],i,j,b[3][3]={0};

6  printf("Please input a:\n");

7  for(i=0;i<3;i++)

8   for(j=0;j<3;j++)

9    scanf("%d",&a[i][j]);

10  fun(a,b);

11  for(i=0;i<3;i++)

12  {

13   for(j=0;j<3;j++)

14    printf("%d\t",b[i][j]);

15   printf("\n");

16  }

17  return 0;

18 }

19 void fun(int(*pa)[3],int(*pb)[3])

20 {

21  int i,j;

22  for(i=0;i<3;i++)

23   for(j=0;j<3;j++)

24    pb[j][i]=pa[i][j];

25 }

程序结果如图7.43所示:

图7.43 例7.36程序结果图

【例题中关键问题说明】

(1)第5行定义了两个二维数组a和b、两个整型变量i和j。

(2)第6~9行通过循环将输入的元素赋给数组a。

(3)第10行执行fun函数,将数组a和b传给函数fun。

(4)第19行使指针变量pa和pb分别指向数组a和b。

(5)第22~24行将数组a中的元素通过反向遍历赋给数组a。

(6)第11~14行循环遍历数组a中元素。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈