第二次作业

  学了c++已经三个月,目前感觉自己能掌握基本的语法,但是实际运用过程中还是有不少问题的。

  第九章指针的学习中问题较多,因为运用指针的情形非常多,表示形式也多,所以在运用指针的时候很容易出现语法错误,特别是指针变量做形参的时候;所以目前我为了追求稳定直接常常会偷懒避开指针的使用,这点我认为我是做得非常不好的,因此还是需要加强对指针方面的练习,多做指针数组之类的题目。

遇到指针类型的难题,我会网上查找或者看同学的代码写法,然后对比自己的模板再做修改,然后慢慢学习写法与用法。

新手赛中我的表现很差。。虽然做了很长时间,但是结果也不理想,思维速度慢且逻辑错误很多。所以希望能再度提高编程能力。

具体题目:

 

7-2 找最长单词 (20 分)

在主函数中输入一个字符串main_str,调用函数将main_str中最长的单词取出放入sub_str中(要求被调函数参数为main_str和sub_str),在主函数中输出结果字符串sub_str。假定输入的字符串main_str中单词以一个或多个空格分开。若有多个单词长度相同,输出最后一个。要求函数用指针变量作形参。

输入格式:

一个字符串,串中单词以一个或多个空格分开。

输出格式:

输出字符串中最长的单词。

选择这道题目是因为它奠定了我对指针作形参的运用基础。

刚开始觉得很难,然后慢慢缕清了思路,还是觉得可以入手。

此题重要核心有几个,其一是单词的获取

此处我用了如下语句来获取

  while(a[i] != ' ' && a[i] != '\0')  
        {
             temp++;
             i++;
        }

当读取到空格或字符串末端的时候 就证明前一个单词就读取完毕 让后这时候单词的长度temp也记下来了。

然后便是比较

 if(temp >=count)
        {
            count = temp;
            low = low_temp;
            high = high_temp;
        }

此处获取当前记录的最长的单词长度,还是比较好理解的,同时记录下单词的首字母的和末字母的位置,方便后续把这个最长单词抠出来放到新数组里面。

然后就是参数的传递了,摸清规律之后就用 hanshu(a,b)进行传递,然后用void函数接收 参数表为char*a,char*b 其中用作接收数组。

那以下是完整代码

#include<iostream>
#include<cstring>
using namespace std;
void hanshu(char *a, char *b)
{
    int low;      
    int high;    
    int i,j=0;        
    int count;    
    int temp;     
    int low_temp;
    int high_temp;
    count = 0;
    low = 0;
    high = 0;
    for(i = 0; i < strlen(a); i++)
    {
        temp = 0;
        low_temp = i;
        while(a[i] != ' ' && a[i] != '\0')  
        {
             temp++;
             i++;
        }
        high_temp = i-1;
        if(temp >=count)
        {
            count = temp;
            low = low_temp;
            high = high_temp;
        }
    }
    for(i = low; i <= high; i++)
    {
        b[j]=a[i];
        j++;
    }
 
}
int main()
{
 char a[1000];
 char b[1000];
 cin.getline(a,1000);
 hanshu(a,b);
 cout<<b;
 return 0;
}

其中也参考了同学的思路。也是在他的帮助下弄明白了一维数组做实参的一些内容。

指针数组做形参目前还是不太熟练,尚要练习。

加油吧。

 

 

posted on 2018-12-08 18:34  午自习  阅读(122)  评论(0编辑  收藏  举报