zoukankan      html  css  js  c++  java
  • 找最长单词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的地址(其实这个全局变量就是这样的要求,无非就是位置在函数中罢了)。

    人生如逆旅,我亦是行人
  • 相关阅读:
    C# NAudio 变声
    初探Protostuff的使用
    CentOS7 配置阿里云yum源,非常之简单
    javacv 视频增加视频(画中画)
    抓包调试fiddler
    CentOS7 手动编译升级GCC至9.3.0
    C# CefSharp 新版本(83 以后版本) 如何在js中直接调用c#类
    毕业设计——驾驶证理论考试系统的设计与实现 2022年1月2日20:35:14
    送餐机器人乐动雷达记录
    linux下拉取git代码
  • 原文地址:https://www.cnblogs.com/sz2003/p/14083276.html
Copyright © 2011-2022 走看看