zoukankan      html  css  js  c++  java
  • C语言函数篇第二弹来啦

    字符类函数

    ​ 哦豁,欢迎来到我的区域,首先看到的是五个大字是字符类的函数,那么今天呢我们就来说说我对于字符类代码的处理以及这段时间我写的一些我个人觉得会有点点让我觉得还不错的代码。

    ​ 首先在我看来呢就是怎么一个说呢,对于C语言我觉得就是输入输出,那么输入输出就哟啊先定义啦,这种话就不用我来说了,大家懂得都懂,那么就是那就是输入和输出,那么输入和输出就有几种方式。首先是字符的输入,那么很简单直接用一维数组来定义,然后先对数组定义初始化。

    初始化

    ​ 初始化的方法呢你可以直接在一开始就定义,例如:

    //字符数组的初始化
    int arr[]={'i',' ','l','o','v','e',',','y','u','o'};
    //输出的就是i love,you
    //那么对于字符串的数组呢我们就可以
    int arr[]={"i love you"};
    //当然也可以省略花括号
    

    当然这是最普通的数组定义最直接也是最快捷的方式,但是呢这样的方式会导致我们一开始函数定义是很什么里面就是什么,而我呢会喜欢倾向于装X一点子的,我会喜欢自己随时像输入什么样的字符都可以来执行我对代码的操作,那么此时我们就可以使用scan来输入函数

    那么主要是由for函数来进行输入,例如

    char arr[10];       //在这里呢我们还是要先定义函数的长度的
    for(i=o;i<10;i++){
        scanf("%c",&arr[i]);
    }
    //输出则是一样的
    for(i=0;i<10;i++){
        printf("%c",arr[i]);
    }
    

    ​ 那么函数长度的定义呢,我们可以定一为全局变量,因为如果定义为全局变量的时候数组可定义长度相对来说比较大一点,但是再定义全局变量 的时候要考虑到全局变量再整合函数体中被调用时候的变化,尽可能地不要定义很多的全局变量,但是定义一些子还是可以的。

    ​ 那字符串的输入输出呢就直接用到 get[arr]以及puts[arr];即可

    那么接下来就是咱最近做的立体啦!!!!!!

    撒花撒花撒花!!!!

    例题篇

    ​ 写一个函数,输入一行字符将最长的单词输出。

    ​ 咱先来一波小小的分析:

    ​ 首先是输入字符串,然后要输出最长的单词,那么就要想到

    ​ 第一,如何输出判定程序接受到的是不是字母

    ​ 第二,既然是要最长的单词,那就免不了单词之间的比较

    ​ 第三,单词之间的比较,如何确定一个单词的长度,

    ​ 第四,找到最长的单词之后该如何输出。

    ​ 那么以上就是对于这个题目的一些疑问(在我看来)。

    首先第一步解决,我们可以通过一个函数来判断是否输入的是不是函数,那我们只需要判定每一个元素是不是再az以及AZ之间就可以啦!

    那后面的问题我们看代码配合来解决!咱废话不多说,直接上代码

    #include<stdio.h>
    #include<string.h>
    //这个是用来判定是否为字母的
    int alphabet(char c){
    	if((c>='a'&c<='z')||(c>='A'&&c<='Z')){
    		return 1;
    	}else{
    		return 0;
    	}
    }
    
    //这个是用来判断最长字符的
    int longest(char arr[]){
    	int begin=0, lengce=0, len=0, point=0, flag=0, i;           //begin是用记录最长字母的开始位置,而point是用来记录每一个字母的起始位置,当找到最长的字母是将point的值给到begin 
    	for(i=0;i<=strlen(arr);i++){                                //len是用来计入每输入一个函数时长度,而当一个单词结束的时候就把值赋给lengce,其后每一个进行比较难 
    		if(alphabet(arr[i])){                //如果进入的数字是字母 
    			if(flag){                        //在此刻就要记录数字的长度 
    				point = i;
    				flag=0;
    			}else{
    				len++;
    			}
    		}else{
    			flag=1;
    			if(len>=lengce){
    				lengce = len;
    				begin = point;
    				len = 0;
    			}
    		}
    	}
    	return begin;
    }
    
    int main()
    {
    	int i;
    	char str[100];
    	printf("input string:
    ");
    	gets(str);
    	printf("output string:
    ");
    	for(i=longest(str);alphabet(str[i]);i++){
    		printf("%c",str[i]);
    	}
    	return 0;
    }
    

    ​ 好ok,那么这段函数比较难的点呢,在于判定一个字符串长,哪一个是最长的呢,

    ​ 我们在这longest这个函数解决了前面我们提到的问题的中间两个问题

    ​ 我们如何来判定是否是字母就是判断它是否有空格,那么如果是有空格,再alhabet函数就会告诉我们这个元素是不是字符,那么如果不是字符的话就是说,已经进入的一个状态,就是当我们遇到空格就是上一个字母的结束,和下一个字母的开始。

    ​ 我们用len来记录函数的长度,用flag来判断是否开始记下一个字母开始的顺序,用point记录下每一个字母开始的位置,当长度最大的时候我们就把值给到begin,那么这个begin也是我们函数的返回值。

    ​ begin有什么用处呢?

    ​ 我们找到最长的函数了,那么我们就要把它输出才是最完整的,那么我们看到这个函数的输出单拎出来康康。

    for(i=longest(str);alphabet(str[i]);i++){
    		printf("%c",str[i]);
    	}
    

    ​ 比较奇妙的就是这个了

    ​ 通常我们看的for函数表达可不是这样的,那么我来解读一下子

    ​ 第一个表达式i的值就是说我们最后找到了那么最长的字符了,返回值point,就是i开始的地方,第二个表达式是我们alhabet判定是否是字母,然后I++,救命,这是什么神仙表示方式,给我学起来

    ​ 那么这也给我们一个其实告诉我们再输出字符串的时候我们也可以用类似的方式来输出一个字符串中的一段字符。

    ​ 那么今天就到这结束啦~~~~

  • 相关阅读:
    #1071 : 小玩具
    #1063 : 缩地
    #1124 : 好矩阵
    hiho#1145 : 幻想乡的日常
    hiho#14
    hiho 毁灭者问题
    西南民大oj(递推)
    西南民大oj(矩阵快速幂)
    西南民大oj(两园交求面积)
    hdu2844(多重背包)
  • 原文地址:https://www.cnblogs.com/ht0529/p/15400535.html
Copyright © 2011-2022 走看看