C语言指针练习

3 篇文章 0 订阅
1 篇文章 0 订阅

C语言指针练习

题目

1、有一个字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串;(复制操作在子函数中实现,并用指针传递);

2、输入3个整数,按照由大到小的顺序输出,并要求用指针进行操作;

3、输入3个字符串,按照由小到大的顺序将其输出,并要求用指针进行操作;

4、编写一程序,输入月份号,输出该月的英文月名。例如,输入“3”,则输出“March”,要求用指针数组处理。

5、编写一个函数,实现将一个已知字符串的内容复制到一个新的字符串。

6、编制一个字符替换函数,实现将已知字符串str中,所有ch指定的字符都用ch2指定的字符代替。函数原型:void replace (char *str,char ch,char ch2)

7、自己编写一个函数,比较两个字符串是否相等,函数原型为:int Compare (char *str1, char *str2)

8、编写一个函数,删除一个字符串中的指定字符,函数原型:Void delStr(char *str,char ch)

代码

1、有一个字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串;(复制操作在子函数中实现,并用指针传递);

#include <stdio.h>

/* 有一个字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符
复制成为另一个字符串;(复制操作在子函数中实现,并用指针传递); */

int main(void)
{
    int n,m;
    char string[100];
    printf("输入一个数n:");  //n是字符串一共的个数
    scanf("%d",&n);
    printf("输入一串字符 :");
    scanf("%s",string);
    printf("输入一个数m:");  //m是需要移动赋值的字符串数
    scanf("%d",&m);
    printf("结果为:");
    copy(string,n,m);
    return 0;
}
void copy(char* str, int n, int m)
{
    int i,j;
    char string[100];
    char *p = string;
    i = m-1;
    j = 0;
    str = str + i;               //从m-1个位置开始赋值给一个新的字符数组
    for( ;i < n; i++,j++)
    {
        *(p+j) = *(str++);
        printf("%c",*(p+j));
    }
}

2、输入3个整数,按照由大到小的顺序输出,并要求用指针进行操作;

#include <stdio.h>

/* 输入3个整数,按照由大到小的顺序输出,并要求用指针进行操作; */

int main() {
	int n1,n2,n3;
	printf("输入三个整数\n");
	scanf("%d%d%d",&n1,&n2,&n3);
	int *p1, *p2, *p3, temp;
	p1=&n1;
	p2=&n2;
	p3=&n3;
	if (*p1 < *p2)
    {
        temp = *p1;
        *p1 = *p2;
        *p2 = temp;
    }

    if (*p2 < *p3)
    {
        temp = *p2;
        *p2 = *p3;
        *p3 = temp;
    }

    if (*p1 < *p2)
    {
        temp = *p1;
        *p1 = *p2;
        *p2 = temp;
    }
    printf("大到小:%d,%d,%d\n", n1, n2, n3);
	return 0;
}  

3、输入3个字符串,按照由小到大的顺序将其输出,并要求用指针进行操作;

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* 输入3个字符串,按照由小到大的顺序将其输出,并要求用指针进行操作; */

void swap(char** a,char** b)
{
    char* temp;
    temp= *a;
    *a= *b;
    *b=temp;
}
 
int main()
{
    char a[50],b[50],c[50];
    printf("输入三串字符") ;
    scanf("%s%s%s",a,b,c);
    char *p1=a,*p2=b,*p3=c;
    if(strcmp(p1,p2)>0) swap(&p1,&p2);
    if(strcmp(p1,p3)>0) swap(&p1,&p3);
    if(strcmp(p2,p3)>0) swap(&p2,&p3);
    printf("由小到大的顺序为:%s\t%s\t%s\t",p1,p2,p3);
    return 0;
}

4、编写一程序,输入月份号,输出该月的英文月名。例如,输入“3”,则输出“March”,要求用指针数组处理。

#include <stdio.h>
#include <stdlib.h>

/* 编写一程序,输入月份号,输出该月的英文月名。例如,输入"3",则输出"March",要求用指针数组处理。 */

int main() {
	int month;
	char *Month[12] = { "January","February","March","April","May","June","July","August","September","October","November","December" };
	printf("请输入月份:");
	scanf("%d", &month);
	for (;month < 1 || month>12; printf("您的输入有误,请重新输入\n"), scanf("%d", &month));
	printf("%d月的英文名为:%s\n", month, *(Month + month - 1));
	return 0;
}

5、编写一个函数,实现将一个已知字符串的内容复制到一个新的字符串。

#include<stdio.h>

/*编写一个函数,实现将一个已知字符串的内容复制到一个新的字符串。*/ 

void strcpy_s(char *s1,char *s2){
	printf("字符串s1为:");
    while(*s1=*s2){
        printf("%c",*s1);
		s1++;
		s2++;
    }
}
void main(){
    char s1[32];
    char s2[32];
	printf("请输入字符串s1:");
		gets(s1);
	printf("请输入字符串s2:");
		gets(s2);
    strcpy_s(s1,s2);	
}

6、编制一个字符替换函数,实现将已知字符串str中,所有ch指定的字符都用ch2指定的字符代替。函数原型:void replace (char *str,char ch,char ch2)

#include <stdio.h>
#include <string.h>

/* 编制一个字符替换函数,实现将已知字符串str中,所有ch指定的字符都用ch2指定的字符代替。
函数原型:void replace (char *str,char ch,char ch2)*/

void replace(char *str,char *ch,char *ch2){
    char bstr[strlen(str)];//转换缓冲区
    memset(bstr,0,sizeof(bstr));
    int i;
    for(i=0;i<strlen(str);i++){
        if(!strncmp(str+i,ch,strlen(ch))){//查找目标字符串
            strcat(bstr,ch2);
            i+=strlen(ch)-1;
        }else{
        	strncat(bstr,str+i,1);//保存一字节进缓冲区
	    }
    }
 
    strcpy(str,bstr);
}
int main(void) {
	char str[]="day by day";
	printf("原字符为:%s\n",str);
	char a[5],b[5];
	printf("输入要被替换字符:"); 
	scanf("%s",&a);
	printf("输入替换字符:");
	scanf("%s",&b);
	replace(str,a,b);
	printf("替换后为:") ; 
	puts(str);
	return 0;
}

7、自己编写一个函数,比较两个字符串是否相等,函数原型为:int Compare (char *str1, char *str2)

#include <stdio.h>
#include <stdlib.h>

/* 自己编写一个函数,比较两个字符串是否相等,
函数原型为:int Compare (char *str1, chstr1r *str2) */

int Compare(char *str1,char *str2)
{
    int i,flag=0;
    for(i=0;str1[i]!='\0'&&str2[i]!='\0';)
    if(str1[i]==str2[i])
    i++;
    else{
        flag=0;
        break;
    }
    if(str1[i]=='\0'&&str2[i]=='\0')
    flag=1;
    return flag;
}

int main()
{
    char str1[10];
    char str2[10];
    printf("输入两串字符:");
    scanf("%s%s",&str1,&str2);
    if(Compare(str1,str2)==1)
    printf("相同");
    else printf("不相同"); 
    return 0;
}

8、编写一个函数,删除一个字符串中的指定字符,函数原型:Void delStr(char *str,char ch)

#include <stdio.h>

/*编写一个函数,删除一个字符串中的指定字符,
函数原型:Void delStr(char *str,char ch)*/ 

void delStr(char *str, char ch){
	int k=1;
	char *p=str;
	while(*p!=ch&&*p!='\0') 
		p++;
	while(*p!='\0'){
		char *t=p+1;
		if(*t==ch)
			k++;
		else 
			*(p-k+1)=*t;
		p++;
	}
}
int main(){
    char str[666],ch;
    printf("请输入字符串:");
    fgets(str,666,stdin);
    printf("请输入要删除的字符:");
    scanf("%c",&ch);
	delStr(str, ch);
	printf("%s",str);
	return 0;
}

结果

1、在这里插入图片描述

2、在这里插入图片描述

3、在这里插入图片描述

4、在这里插入图片描述

5、在这里插入图片描述

6、在这里插入图片描述

7、在这里插入图片描述

8、在这里插入图片描述

  • 10
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

colorsZeroz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值