学了c++已经三个月,目前感觉自己能掌握基本的语法,但是实际运用过程中还是有不少问题的。
第九章指针的学习中问题较多,因为运用指针的情形非常多,表示形式也多,所以在运用指针的时候很容易出现语法错误,特别是指针变量做形参的时候;所以目前我为了追求稳定直接常常会偷懒避开指针的使用,这点我认为我是做得非常不好的,因此还是需要加强对指针方面的练习,多做指针数组之类的题目。
遇到指针类型的难题,我会网上查找或者看同学的代码写法,然后对比自己的模板再做修改,然后慢慢学习写法与用法。
新手赛中我的表现很差。。虽然做了很长时间,但是结果也不理想,思维速度慢且逻辑错误很多。所以希望能再度提高编程能力。
具体题目:
在主函数中输入一个字符串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;
}
其中也参考了同学的思路。也是在他的帮助下弄明白了一维数组做实参的一些内容。
指针数组做形参目前还是不太熟练,尚要练习。
加油吧。
原文:https://www.cnblogs.com/wuzixi1807/p/10088607.html