• 找最长单词2.0(通过函数输出两个返回值,分别是单词的起始位置和长度,并且输出单词)


    和之前不同的就是这里不是void函数,而是将数组作为返回值的一个int型函数,通过指针来把单词的起始位置和长度以数组的形式送达至主函数。

     1 #include <stdio.h>
     2 #include <string.h>
     3 int *findword(char word[]);
     4 int main()
     5 {
     6     char a[100];
     7     gets(a);
     8     int k,m;
     9     int *s;//定义指针来接受返回值的地址 
    10     s=findword(a);
    11     printf("单词的起始位置为%d
    ",s[1]+1);
    12     printf("单词的长度为%d
    ",s[0]);
    13     printf("最长单词为"); 
    14     for(k=s[1];k<s[1]+s[0];k++){
    15     printf("%c",a[k]);
    16 }
    17 }
    18 int *findword(char word[]){//这里部分和之前的内容几乎一样,唯一的不同就是函数的返回值为一个数组。 
    19     int n,i,a,b,c;
    20     a=b=c=0;
    21     n=strlen(word);
    22     for(i=0;i<n;i++){
    23         if(word[i]!=' '){
    24             b++;
    25         if(a<=b){
    26             a=b;//a为长度 
    27             c=i-a+1;//c为起始位置 
    28         }
    29         continue;
    30         }
    31         else b=0;
    32     }
    33     static int str[2];//设置全局变量,防止在释放函数空间的时候导致str的地址被消除 
    34     int *d;//定义指针来指向全局变量,通过放回值将str的地址送至主函数 
    35     d=str;
    36     str[0]=a;//a为单词长度 
    37     str[1]=c;//c为单词的起始位置 
    38     return d; 
    39 }

    很重要的一点,一定要注意33行的那个static来设置全局变量,否则在函数运行完毕之后,函数的空间将会被释放,那么在函数中定义的str数组的地址也将被消除,致使主函数中的输出发生变化。因此需要设置全局变量来强制锁定str这个数组的地址。

    如果不是题目的要求,感觉可以完全用void函数,再不然可以在主函数中输入来接受str的地址(其实这个全局变量就是这样的要求,无非就是位置在函数中罢了)。

    人生如逆旅,我亦是行人
  • 相关阅读:
    20155213 2016-2017-2 《Java程序设计》第五周学习总结
    20155213 2016-2017-2《Java程序设计》第四周学习总结
    20155213 2016-2017-2《Java程序设计》第三周学习总结
    20155213 2016-2017-2 《Java程序设计》第二周学习总结
    20145109《Java程序设计》第一周学习总结
    《暗时间》读书笔记(三)
    调查问卷
    《Python学习手册》(四)
    《Python学习手册》(三)
    20165322 第五周学习总结
  • 原文地址:https://www.cnblogs.com/sz2003/p/14083276.html
Copyright © 2020-2023  润新知