知交

找最长单词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\n",s[1]+1);
12     printf("单词的长度为%d\n",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的地址(其实这个全局变量就是这样的要求,无非就是位置在函数中罢了)。

posted on 2020-12-03 22:15  知交  阅读(136)  评论(0编辑  收藏  举报

导航