C++:返回函数的指针

问题

此程序已使用C++11新标准,使用GCC编译器请添加参数[ -std=c++0x ],其他编译器请查阅相关手册.

  1. 编写函数的声明,令其接受两个int形参并且返回类型也是int;然后声明一个vector对象,令其元素是指向该函数的指针.
  2. 编写4个函数,分别对两个int值执行加,减,乘,除运算;在上一题创建的vector对象中保存指向这些函数的指针.
  3. 调用上述vector对象中的每个元素并输出其结果.

C++.
image-2033

源代码


/*************************************************************************
> File Name: test.6.56.cpp
> Author: puruidong
> Mail: 1@w1520.com
> Created Time: 2014年03月17日 星期一 20时03分26秒
************************************************************************/

#include
#include
#include
using namespace std;
//将放入vector中函数指针进行运算,并输出值.
//test.6.54-test.6.56有关联.

int add(int a,int b){return a+b;}
int mins(int a,int b){return a-b;}
int mul(int a,int b){return a*b;}
int divs(int a,int b){return a/b;}

int (*re(int sa))(int,int)//返回函数指针:两个形参,函数名是re,包含两个形参,而函数名也包含了一个形参.它的返回类型是:int (*)(int,int).
{
switch(sa)
{
case 0:
return add;
break;
case 1:
return mins;
break;
case 2:
return mul;
break;
case 3:
return divs;
break;
}
return 0;
}

int main()
{
int a=10,b=5;
int (*pas)(int,int);//声明一个类型:包含两个形参的一个函数[函数名是pas],pas前面的*号表示其是一个指针,即函数指针
vector kess;//使用decltype关键字获取pas的准确类型
for(int i=0;i<4;++i)//使用pas获取实际的函数指针. { pas=re(i); kess.push_back(pas);//添加到vector } vector::iterator it=kess.begin();//依旧使用decltype获取准确类型.
for(;it!=kess.end();++it)
{
cout << ((*it)(a,b)) << endl;//内联函数:解引用,计算值并输出值. } return 0; }

参考了相关资料,具体请前往:[嗯,让我们彻底搞懂C/C++函数指针吧]

C++:使用递归输出vector中的值

问题

此程序使用了C++11新标准,在Linux GCC编译环境中请添加参数[ -std=c++0x ] 进行编译.其他编译器请查阅相关手册

递归输出vector中的值.

一般输出vector中的值都是使用循环比较简单,而使用递归输出[估计也只有书上才会让这么做],太少见了.留个笔记吧.

C++.
image-2029

源代码


/*************************************************************************
> File Name: test.6.33.cpp
> Author: puruidong
> Mail: 1@w1520.com
> Created Time: 2014年03月16日 星期日 23时42分42秒
************************************************************************/

#include
#include
using namespace std;
//编写一个递归函数,输出vector对象的内容.

//递归数字累加
int resstest(int n)
{
if(n>=1)
{
return resstest(n-1)+n;
}
return 0;
}

//递归输出vector
void pass(vector &is,unsigned i)
{
if(i==is.size())
{
return ;
}
cout << is[i++] << " " << endl; pass(is,i); } int main() { vector ksa = {1,2,3,4,5,6,7,8,9};//c++11的初始化.
cout << "输出vector的结果:" << endl; pass(ksa,0); cout << "1+2+3+4....10的结果:" << (resstest(10)) << endl; return 0; }

C++:查找字符串中的字符

重要信息

这个问题困扰了我两个晚上,第一次遇到这样的问题.

使用G++作为C++编译器的同学,打开警告信息[编译时在文件后面加上: -Wall ]吧,就因为原来没开启编译警告信息才困扰了这么久啊.

C++.
image-2025

问题描述

读入一个字符串,判断其中是否包含ff,fl,fi,输出次数.

解决方案

注意:”>>>”注释后面是修改句.

错误版本1


/*************************************************************************
> File Name: test.5.12.cpp
> Author: puruidong
> Mail: 1@w1520.com
> Created Time: 2014年03月12日 星期三 23时07分44秒
************************************************************************/

//逻辑错误
//会重复统计出现次数.

#include
using namespace std;
//统计ff,fl,fi的数量

int main()
{
cout << "请输入字符(可包括:ff,fi,fl):" << endl; int result=0; string pa; cin >> pa;
int index= 0 ;//记录位置.
for (int t=0;t!=pa.size();++t)//>>>++t出现异常.
{
//判断第一个字符是否是f.
if(pa[t]=='f')
{
index = t;
}
//首先,位置不能为最后一个,然后判断下一位是否为f,l,i.
char parts = pa[index+1];//这个index依然顺序出现,出现值顺序为:1,2,3..字符长度,因此出现逻辑错误.
switch(parts)
{
case 'f':
case 'l':
case 'i':
result+=1;
break;
}
}
cout << "包含ff,fl,fi的个数是:" << result << endl; return 0; }

错误版本2


/*************************************************************************
> File Name: test.5.12.cpp
> Author: puruidong
> Mail: 1@w1520.com
> Created Time: 2014年03月12日 星期三 23时07分44秒
************************************************************************/

//ERROR,运行错误!!!
//死循环.无法正常运行.

#include
using namespace std;
//统计ff,fl,fi的数量

int main()
{
cout << "请输入字符(可包括:ff,fi,fl):" << endl; int result=0; string pa="ff"; cin >> pa;
cout << pa.size() << endl; for(int index=0;index<=pa.size();index+2)//>>>修改了此句.index+2虽然刻意改变了index的值,但是并未返回.
{

cout << pa.size() << endl; if(pa[index]=='f') { switch(pa[index+1]) { case 'f': case 'l': case 'i': result+=1; break; } } } cout << "包含ff,fl,fi的个数是:" << result << endl; return 0; }

可运行版本


/*************************************************************************
> File Name: test.5.12.3.cpp
> Author: puruidong
> Mail: 1@w1520.com
> Created Time: 2014年03月13日 星期四 02时32分45秒
************************************************************************/

//ok.

#include
using namespace std;
//统计ff,fl,fi的数量

int main()
{
cout << "请输入字符(可包括:ff,fi,fl):" << endl; int result=0; string pa="ff"; cin >> pa;
//>>>第一个位置是0,下一个位置应该是2,所以index+=2将值增加之后返回至index.
for(unsigned index=0;index!=pa.size();(index+=2))
{
if(pa[index]=='f')//判断第一个字符是f,就进入到switch.
{
switch(pa[index+1])//下一个位置如果是下面三个字符就对返回值+1.
{
case 'f':
case 'l':
case 'i':
result+=1;
break;
}
}
}

cout << "字符串的长度是:" << pa.size() << "\n包含ff,fl,fi的个数是:" << result << endl; return 0; }

继续学习ING,加油!!