精华内容
下载资源
问答
  • 要求:s小于t时返回-1,s等于t时返回0,s大于t时返回1.在主函数中任意输入4个字符串,利用该函数求最小字符串,并输出该字符串。(本人初学C++,希望各位大神指教)
  • 编写一个copy函数,完成对于字符串的复制功能,并在主函数中输入任意字符串,调用该copy函数,输出拷贝后的字符串。 #include<stdio.h> void copy(char *p,char *q){ int i; while(*(p+i)!='\0'){ *(q+i)...

    编写一个copy函数,完成对于字符串的复制功能,并在主函数中输入任意字符串,调用该copy函数,输出拷贝后的字符串。

    #include<stdio.h>
    void copy(char *p,char *q){
    	int i;
    	while(*(p+i)!='\0'){
    		*(q+i)=*(p+i);
    		i++;
    	}
    	*(q+i+1)='\0';
    }
    main(){
    	char s1[100],s2[100];
    	scanf("%s",s1);
    	char *p=s1,*q=s2;
    	copy(p,q);
    	puts(q);
    }
    
    
    展开全文
  • 要求在主函数中输入字符串,并输出复制结果,在被调函数中完成提取该字符串中的数字字符并组成一个整数。 【输入形式】输入任意一行字符串。 【输出形式】提取该字符串中的数字字符并组成一个整数,输出该整数及其两...

    提取字符串中的数字字符并组成一个整数,输出该整数及其两倍的值

    【问题描述】输入任意一行字符串(设字符数不大于80),提取该字符串中的数字字符并组成一个整数,输出该整数及其两倍的值。要求在主函数中输入字符串,并输出复制结果,在被调函数中完成提取该字符串中的数字字符并组成一个整数。

    【输入形式】输入任意一行字符串。

    【输出形式】提取该字符串中的数字字符并组成一个整数,输出该整数及其两倍的值。

    【样例输入】(下划线部分为键盘输入,其余部分为程序输出)

    Enter a string: ab34df6

    【样例输出】

    digit=346,692

    【样例说明】
    输入提示符后要加一个空格。例如“Input integers: ”,其中“:”后要加一个且只能一个空格。
    英文字母区分大小写。必须严格按样例输入输出。

    #include<stdio.h>
    #include<string.h>
    # include <stdlib.h>
    int f(char a[80])
    {char b[80];
        int i=0,j=0,y;
        do{
                if('0'<=a[i]&&a[i]<='9'){b[j]=a[i];j++;}
        i++;
        }while(a[i]!='\0');b[j]='\0';
        y=atoi(b);
        return y;
    }
    
    int main()
    {
        char a[80];
        printf("Enter a string: ");
        gets(a);
        printf("digit=%d,%d",f(a),2*f(a));
        return 0;
    }
    
    展开全文
  • 1.设有置换加密算法:将大小写字母转换为其后的第i个字母,例如,i=4...2.使用重载,设计同名函数,计算原点与一维/二维/三维空间中任意一点之间的距离,并在主函数中测试。(参数可以是类类型,也可以使用普通类型)

    【实验名称】函数的定义与使用               

     

    【实验目的】

    1、熟悉C++函数的定义; 

    2、理解C++函数的使用; 

    3、掌握C++的函数重载。

     

    【实验原理】

    函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。我们把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。

    C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载。借助重载,一个函数名可以有多种用途。

     

    【实验内容】

    一、设有置换加密算法:将大小写字母转换为其后的第i个字母,例如,i=4时,A->E…Z->D,a->e… z->d,非字母不变。编写程序,能够选择加密或解密功能以及i值,输入字符串后给出结果。

    代码(具体功能解释可见代码中注释部分):

    #include<iostream>
    using namespace std;
    
    //加密
    void jiami(char *point1, char *point2,int shift)
    {
    	strcpy(point2, point1);
    
    	for (int i = 0; i < strlen(point2); i++)
    	{
    		//大写字母
    		if (point2[i] >= 65 && point2[i] <= 90)
    		{
    			point2[i] = point2[i] + shift;
    			//若溢出
    			if (point2[i] > 90)
    			{
    				point2[i] = (point2[i] % 91) + 65;
    			}
    		}
    		//小写字母
    		else if(point2[i] >= 97 && point2[i] <= 122)
    		{
    			point2[i] = point2[i] + shift;
    			//若溢出
    			if (point2[i] > 122)
    			{
    				point2[i] = (point2[i] % 123) + 97;
    			}
    		}
    	}
    	return;
    }
    
    //解密
    void jiemi(char *point1, char *point2, int shift)
    {
    	strcpy(point2, point1);
    	for (int i = 0; i < strlen(point2); i++)
    	{
    		//大写字母
    		if (point2[i] >= 65 && point2[i] <= 90)
    		{
    			point2[i] = point2[i] - shift;
    			//若溢出
    			if (point2[i] < 65)
    			{
    				point2[i] = 91 - (65 - point2[i]);
    			}
    		}
    		//小写字母
    		else if (point2[i] >= 97 && point2[i] <= 122)
    		{
    			point2[i] = point2[i] - shift;
    			//若溢出
    			if (point2[i] < 97)
    			{
    				point2[i] = 123 - (97 - point2[i]);
    			}
    		}
    	}
    	return;
    }
    
    int main()
    {
    	//freopen("in.txt", "r", stdin);
    	char plaintext[100], ciphertext[100];
    	int judge = 0; int shift;
    	cout << ".................................." << endl;
    	while (true)
    	{
    		memset(plaintext, '\0', sizeof(plaintext));
    		memset(ciphertext, '\0', sizeof(ciphertext));
    		cout << "请选择功能:1、加密  2、解密  3、退出 " << endl;
    		cin >> judge;
    		//退出
    		if (judge == 3)
    		{
    			cout << ".................................." << endl;
    			break;
    		}
    		cout << "请输入位移量:" << endl;
    		cin >> shift;
    		//加密
    		if (judge == 1)
    		{
    			cout << "请输入待加密明文:" << endl;
    			cin >> plaintext;
    			jiami(plaintext, ciphertext, shift);
    			cout << "加密后的密文为:\n" << ciphertext << endl;
    			cout << ".................................." << endl;
    		}
    		//解密
    		else
    		{
    			cout << "请输入待解密密文:" << endl;
    			cin >> ciphertext;
    			jiemi(ciphertext, plaintext, shift);
    			cout << "解密后的明文为:\n" << plaintext << endl;
    			cout << ".................................." << endl;
    		}
    	}
    	return 0;
    }
    
    

    运行结果:

     

    二、使用重载,设计同名函数,计算原点与一维/二维/三维空间中任意一点之间的距离,并在主函数中测试。(参数可以是类类型,也可以使用普通类型)

    代码(具体功能解释可见代码中注释部分):

    #include<iostream>
    #include<cmath>
    using namespace std;
    
    //一维点
    double distance(double x)
    {
    	double result = sqrt(x*x);
    	return result;
    }
    
    //二维点
    double distance(double x,double y)
    {
    	double result = sqrt(x*x + y * y);
    	return result;
    }
    
    //三维点
    double distance(double x, double y, double z)
    {
    	double result = sqrt(x*x + y * y + z * z);
    	return result;
    }
    
    int main()
    {
    	//freopen("in.txt", "r", stdin);
    	double x, y, z;
    	int judge;
    	cout << "......................................................" << endl;
    	while (true)
    	{
    		double result;
    		cout << "请选择功能:1、一维点  2、二维点  3、三维点  4、退出" << endl;
    		cout << "  ";
    		cin >> judge;
    		//程序结束判断
    		if (judge == 4)
    		{
    			cout << "......................................................" << endl;
    			break;
    		}
    		cout << "请输入点的坐标:";
    		//一维点
    		if (judge == 1)
    		{
    			cin >> x;
    			result = distance(x);
    		}
    		//二维点
    		else if (judge == 2)
    		{
    			cin >> x >> y;
    			result = distance(x, y);
    		}
    		//三维点
    		else if (judge == 3)
    		{
    			cin >> x >> y >> z;
    			result = distance(x, y, z);
    		}
    		//输出计算结果
    		cout << "该点距离原点的距离为:";
    		cout << result << endl;
    		cout << "......................................................" << endl;
    
    	}
    
    	return 0;
    }
    

    运行结果:

     

    【小结或讨论】

    对于第一题,这不禁让我联想到了密码学,这正是最基础的移位密码。主要的思路就是逐个读取输入进来的字符,若是字母就进行加密/解密,要注意移位时可能发生的溢出,即超过/小于字母的ASCALL码范围,需要用到模运算。若不是字母则不做处理。这里有一个小坑,还让我debug了好一会。就是模运算后应该还要加上一个基础值。比如有大写字母移位到91,这超出了大写字母的表示范围,如果我们直接模运算就直接模成了0,所以我们一个还要加上一个大写字母的基础值,即A的ASCALL码65,这样才能使移位操作围成一个首尾相连的圈。

    对于第二题,题目本身不算太难,其中重载函数的使用让我感觉还是比较新鲜的。毕竟之前C语言中要求函数名是不能重复的。这样根据参数的不同自动匹配相应的子函数,我感觉还是非常的方便的,也让我感到了C++语言较之C语言的灵活。

    展开全文
  • 指针类编程题

    千次阅读 2017-07-09 10:43:35
    1.编写一函数,完成一个字符串...在主函数中输入任意字符串,并显示原字符串,调用该函数之后输出拷贝后的字符串。#include #include<string.h>void my_copy(char *p,char *q) { while(*p != '\0') { *q = *p; q++;

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

    #include<stdio.h>
    #include<string.h>
    
    void my_copy(char *p,char *q)
    {
        while(*p != '\0')
        {
                *q = *p;
                q++;
                p++;
        }
        *q = '\0';
    }
    int main(int argc, const char *argv[])
    {
        char str1[100],str2[100];
        gets(str1);
        puts(str1);
        my_copy(str1,str2);
        puts(str2);
        return 0;
    }

    2.编写一函数,求一个字符串的长度,要求用字符指针实现。在主函数中输入字符串,调用该函数输出其长度。

    #include<stdio.h>
    #include<string.h>
    
    int my_strlen(char *p)
    {
        int tot=0;
        while(*p != '\0')
        {
            tot++;
            p++;
        }
        return tot+1; //包含 '\0'
    }
    
    int main(int argc, const char *argv[])
    {
        char str[100];
        gets(str);
        printf("tot:%d\n",my_strlen(str));
        return 0;
    }

    3.从键盘上输入10个数据到一维数组中,然后找出数组中的最大值和该值所在的元素下标。

    #include<stdio.h>
    
    int  max(int *p)
    {
        int max;
        int i,j;
        int index;
        for(i=0;i<9;i++)
        {
            max = *(p+i);
            index = i;
            for(j=1;j<10;j++)
            {
                if(max < *(p+j))
                {
                    max = *(p+j);
                    index = j;
                }
            }
        }
        return index;
    }
    
    int  min(int *p)
    {
        int min;
        int i,j;
        int index;
        for(i=0;i<10;i++)
        {
            min = *(p+i);
            index = i;
            for(j=1;j<10;j++)
            {
                if(min > *(p+j))
                {
                    min = *(p+j);
                    index = j;
                }
            }
        }
        return index;
    }
    
    int main(int argc, const char *argv[])
    {
        int a[10];
        int i;
        for(i=0;i<10;i++)
        {
            scanf("%d",&a[i]);
        }
        printf("max下标:%d,min下标:%d\n",max(a),min(a));
        return 0;
    }

    4.从键盘上输入10个整数存放到一维数组中,将其中最小的数与第一个数对换,最大的数与最后一个数对换。要求进行数据交换的处理过程编写成一个函数,函数中对数据的处理要用指针方法实现。输入数据为:35,20,94,-23,39,-56,100,87,49,12.

    #include<stdio.h>
    
    void  max(int *p)
    {
        int max,temp;
        int i,j;
        int index;
        for(i=0;i<9;i++)
        {
            max = *(p+i);
            index = i;
            for(j=1;j<10;j++)
            {
                if(max < *(p+j))
                {
                    max = *(p+j);
                    index = j;
                }
            }
        }
        temp = *(p + index);
        *(p + index) = *(p + 9);
        *(p + 9) = temp;
    }
    void  min(int *p)
    {
        int min,temp;
        int i,j;
        int index;
        for(i=0;i<10;i++)
        {
            min = *(p+i);
            index = i;
            for(j=1;j<10;j++)
            {
                if(min > *(p+j))
                {
                    min = *(p+j);
                    index = j;
                }
            }
        }
        temp = *(p + index);
        *(p + index) = *(p + 0);
        *(p + 0) = temp;
    }
    
    int main(int argc, const char *argv[])
    {
        int a[10];
        int i;
        for(i=0;i<10;i++)
        {
            scanf("%d",&a[i]);
        }
        min(a);
        max(a);
        for(i=0;i<10;i++)
        {
            printf("%d\t",a[i]);
        }
        printf("\n");
        return 0;
    }

    5.编写一个函数(参数用指针)将一个3×3矩阵转置。

    #include<stdio.h>
    
    void zhuanzhi(int (*p)[3],int (*q)[3])
    {
        int i,j,k;
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                for(k=0;k<3;k++)
                {
                    *(*(q+i)+k) = *(*(p +k) + i);
                }
            }
        }
    }
    
    int main(int argc, const char *argv[])
    {
        int a[3][3],b[3][3];
        int i,j;
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        zhuanzhi(a,b);
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                printf("%d ",b[i][j]);
            }
        }
        printf("\n");
        return 0;
    }

    6.利用指向行的指针变量求5×3数组各行元素之和

    #include<stdio.h>
    
    void my_tot(int (*p)[3])
    {
        int tot;
        int i,j;
        for(i=0;i<5;i++)
        {
            tot = 0;
            for(j=0;j<3;j++)
            {
                tot += *(*(p+i) + j);
            }
            printf("第%d行元素之和为:%d\n",i+1,tot);
        }
    }
    
    int main(int argc, const char *argv[])
    {
        int a[5][3];
        int i,j;
        for(i=0;i<5;i++)
        {
            for(j=0;j<3;j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        //printf("tot:%d\n",my_tot(a));
        my_tot(a);
        return 0;
    }

    7.从键盘上输入10个整数存放到一维数组中,用函数实现将10个整数按输入时的顺序逆序排列,函数中对数据的处理要用指针方法实现。

    #include<stdio.h>
    
    void my_nixu(int *head,int *tail)
    {
        char temp;
        while(head < tail)
        {
            temp = *head;
            *head = *tail;
            *tail = temp;
            head ++;
            tail --;
        }
    }
    int main(int argc, const char *argv[])
    {
        int a[10];
        int i;
        int *head,*tail;
        for(i=0;i<10;i++)
        {
            scanf("%d",&a[i]);
        }
        head = &a[0];
        tail = &a[9];
        my_nixu(head,tail);
        for(i=0;i<10;i++)
        {
            printf("%d ",a[i]);
        }
        printf("\n");
        return 0;
    }

    8.用指针法编程,从键盘上输入多个字符串(每个串不超过5个字符且没有空格),用”*”作为输入结束的标记。从所输入的若干字符串中,找出一个最大的串,并输出该串。要求串的输入以及最大串的查找通过调用编写的函数实现。

    #include<stdio.h>
    #include<string.h>
    
    int main(int argc, const char *argv[])
    {
        //通过调用系统库函数来写的
        char s[6];
        char max[6];
        gets(s);
        strcpy(max,s);
        while(1)
        {
            gets(s);
            if(strncmp(s,"*****",5) == 0)
                break;
            if(strcmp(max,s) < 0)
                strcpy(max,s);
        }
        printf("%s\n",max);
        return 0;
    }

    9、编写一个函数,函数的功能是移动字符串中的内容。移动的规则如下:把第1到第m个字符,平移到字符串的最后;再把第m+1到最后的字符移动到字符串的前部。例如,字符串中原由的内容为:ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是DEFGHIJKABC。在主函数中输入一个长度不大于20的字符串和平移的值m,调用函数完成字符串的平移。要求用指针方法处理字符串。

    #include<stdio.h>
    #include<string.h>
    void fun(char *head,char *tail,char *p,int m,int n)
    {
        int i;
        for(i = 0;i < n-m-1 ;i ++)   //去掉 '\0' 的位置
        {
            *p = *(tail+i);
            p++;
        }
        for(i = 0;i < m;i++)
        {
            *p = *(head + i);
            p++;
        }
        *p = '\0';
    }
    int main(int argc, const char *argv[])
    {
        char str1[20],str2[40];
        int m,n;
        char *head,*tail;
        gets(str1);
        n = strlen(str1);
        scanf("%d",&m);
        head = str1 + 0;
        tail = str1 + m;
        fun(head,tail,str2,m,n);
        puts(str2);
        return 0;
    }
    

    10、输入一个长度不大于30的字符串,将此字符串中从第m个字符开始的剩余全部字符复制成为另一个字符串,并将这个新字符串输出。要求用指针方法处理字符串。

    #include<stdio.h>
    #include<string.h>
    
    void my_copy(char *p,char *q,int m,int n)
    {
        int i;
        for(i = m - 1;i < n;i ++)
        {
            *q = *(p + i);
            q++;
        }
        *q = '\0';
    }
    
    int main(int argc, const char *argv[])
    {
        char str1[30],str2[30];
        int m,n ;
        gets(str1);
        scanf("%d",&m);
        n = strlen(str1);
        my_copy(str1,str2,m,n);
        puts(str2);
        return 0;
    }
    
    展开全文
  • C语言常用字符数组(character arrays)来表示字符串,在存储字符串时,系统会添加'\0'作为结束符。...为了接收任意长度的字符串,可以在主函数中判断接收的状态,当一行字符串超长时,进行循环接收。 #in
  • 函 数 部 分 1设计一个子函数实现将两个整数交换并在主函数中调用此函数 2设计一个子函数统计任意串字符中数字字符的个数并在主函数中调用此函数 3设计一个子函数对任意 n 个整数排序并在主函数中输入 10 个整数...
  • 2020moectf—flower

    2020-11-07 16:01:00
    然后输入任意字符串,emm竟然被教育了一顿。 但看它的报错是提示我们输入字符串太长,因此输入一个短的,看来这阅卷老师是真厉害,直接把我高中的底给透出来了。 直接奖励它给他拖入ida,查找程序出现的字符串...
  • 2) 在主函数中完成数据的输入与结果的输出 5. 按由大到小的顺序对一个含有N个整型数据的数组A[N]进行排序,利用如下改进的选择排序方法:第一次选出最大者存入A[1],第二次选出最小者存入A[N],第三次选出次大者存入A...
  • 5. 编写一个函数,由实参传过来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述的结果。 6. 用一个函数来实现将一行字符串中最长的单词输出。 7. 自定义函数实现将...
  • 2) 在主函数中完成数据的输入与结果的输出。 2. 如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)和等于A,则将整数A和B称为亲密数对。编程求5000以内的全部亲密数对...
  • 一小时内学会 C#(txt版本)

    热门讨论 2009-08-19 18:09:37
    字符串,所有基本和内建类型 ? 结构 ? 枚举类型 引用类型 引用类型堆(heap)分配内存且当其不再使用时,将自动进行垃圾清理。和 C++ 要求用户显示创建 delete 运算符不一样,它们使用新运算符创建,且...
  • 递归下降分析法 一、实验目的: 根据某一文法编制调试递归下降分析程序,以便对任意输入的符号进行分析。...2.利用递归下降分析法分析,对每个非终结符编写函数,在主函数中调用文法开始符号的函数。
  • 这里应说明的是并不是把整个字符串装入指针变量, 而是把存放该字符串的字符数组的首地址装入指针变量。 后面还将详细介绍。 ⑥把函数的入口地址赋予指向函数的指针变量。例如: int (*pf)();pf=f; /*f为函数名*...
  • 前言: 之所以取题目的前部分为自定义API函数(不断更新),是因为笔者想形成一套算法良好、接口清晰...1、在主函数用char型数组a和b分别保存输入的数字A和B; 2、对字符串数组a和b每一位互相相乘,像小学时候学的竖
  • //k记录字符串中的字符转化为整数的值,l使每个节点记录4位 while(a[m]!=';') m++; //m记录字符串中被加数的字符数 n=m; while(a[n]!='\0') n++; //n记录字符串的总字符数 if(a[0]=='-') { head0->data=(-1...
  • #include "string.h" /*字符串函数*/ #include "conio.h" /*屏幕操作函数*/ #include "mem.h" /*内存操作函数*/ #include "ctype.h" /*字符操作函数*/ #include "alloc.h" /*动态地址分配函数*/ #include "dos....
  • 《C语言高级编程与实例剖析》源码

    热门讨论 2010-09-24 11:39:21
    4.7.2 文本输出字符串函数 133 4.7.3 定义文本字型函数 135 4.8 动画技术 137 4.8.1 动态开辟图视口的方法 137 4.8.2 利用显示页和编辑页交替变化 138 4.8.3 利用画面存储再重放的方法 139 4.8.4...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    d. 当输入一个商品时,能显示该商品是否库存,如存在库存,则显示其名称和数量,否则显示“未找到”。 e. 如有可能,请建立一个存储商品名称和数量的文本文件,并为二叉搜索树建立一个成员函数...
  • #include<string.h> //包含字符串函数处理头文件 #include<stdlib.h> //包含动态存储与释放函数头文件 #define N 10000 struct air //定义结构体数组 { int num; char start[20]; char over[20]; char time[10]...
  • 所谓动态解释执行,是指最终应用程序运行过程,由用户自行输入命令表达式组成的字符串序列,然后交由应用程序解释执行。而应用程序开发过程的编译阶段由程序开发人员控制运算操作顺序且由编译程序完成命令...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

在主函数中任意输入字符串