C++ 学习中的两个习题问题(引用,模板方面)望高手指教!!

WizCas 2005-11-02 09:01:05
问题1:
编写通常接受一个参数(字符串的地址), 并打印该字符串的函数.不过, 如果提供了第二个参数(int类型), 且该参数不为0, 则该函数打印字符串的次数将为该函数被调用的次数(打印次数不是第二个参数的值,二等于函数被调用的次数)并编写一个程序使用该函数.
请问这个程序和这个函数应该怎么编?什么叫该函数被调用的次数?请大侠们指教!!

问题2:
下面是我编写的一段代码,运行的时候总是报告错误
expected primary-expression before "char"
这个错误是什么意思..?应该如何解决??百思不得其解!望指教!谢谢!!

char * strings [5] =
{
"I'm WizCas.",
"I wanna sleep!",
"If I go, I'll kill you!",
"For the king! You dull!",
"That is impossible."
};
char * maxstr = maxn(char * strings[], 5);
cout << maxstr << endl;

这个程序的目的是编写一个显具体化,它将char指针数组和数组中的指针数量作为参数,并返回最长的字符串地址. 如果有多个这样的字符串,则返回第一个地址.使用由5个字符串指针组成的数组来测试该具体化.下面是我写的显式具体化,不过还没有测试..(因为卡在上面的那个错误了..)谢谢谢谢谢谢!!!!!

template<> char * maxn<char *>(char * str[], int n)
{
char * maxone = str[0];
for (int i = 1; i < n; i++)
{
if (strlen(str[i]) == strlen(str[i - 1]))
continue;
else if (strlen(str[i]) > strlen(str[i - 1]))
maxone = str[i];
}
return maxone;
}
...全文
245 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
WizCas 2005-11-11
  • 打赏
  • 举报
回复
谢谢各位~!!呵呵现在明白了~~
worksoft2003 2005-11-10
  • 打赏
  • 举报
回复
char * maxstr = maxn(char * strings[], 5);//实参引用错误
正确方法:
char * maxstr = maxn(strings, 5);
BR2014 2005-11-10
  • 打赏
  • 举报
回复
补上关键程序
void prn(char s[],int num)
{
if (num>0)
{
--num;
prn(s,num);
cout<<num+1<<"\t"<<s<<endl;
}

}
BR2014 2005-11-10
  • 打赏
  • 举报
回复
第一个问题用递归能解决
wulinning 2005-11-10
  • 打赏
  • 举报
回复
在函数里声明一个static变量,初始化为0。
void print(const char* a,int n=0)
{
static unsigned int num;
++num;
if(n==0)
printf("%s",a);
else
for(int i=0;i<num;++i)
printf("%s",a);
}
ywchen2000 2005-11-10
  • 打赏
  • 举报
回复
mark
WizCas 2005-11-04
  • 打赏
  • 举报
回复
谢谢高手!!!!不好意思麻烦一下能帮我解答一下第一个问题吗..?
yezhiming1983 2005-11-02
  • 打赏
  • 举报
回复
//ex5.cpp --- The exercise 5 in 8.8 of C++ Primer Plus
//2005-11-2, WizCas
#include <iostream>
#include <cstring>
using namespace std;
template <class T>
T maxn(T ar[], int n);
template <> char * maxn(char * str[], int n);

int main()
{
int intar[6] = {1,4,5,67,324,533};
int maxint = maxn(intar, 6);
cout << maxint << endl;

double dblar[4] = {213.123, 1432.32, 321.654, 3242.9};
double maxdbl = maxn(dblar, 4);
cout << maxdbl << endl;

char * strings [5] =
{
"I'm WizCas.",
"I wanna sleep!",
"If I go, I'll kill you!",
"For the king! You dull!",
"That is impossible."
};
char * maxstr = maxn(char * strings[], 5);
//改为 char * maxstr = maxn(strings, 5);
cout << maxstr << endl;

system("pause");//请问这个有什么用呀
return 0;
}

template <class T>
T maxn(T ar[], int n)
{
T maxone = 0;
for (int i = 0; i < n; i++)
if (ar[i] > maxone)
maxone = ar[i];
return maxone;
}

template<> char * maxn<char *>(char * str[], int n)
{
char * maxone = str[0];
for (int i = 1; i < n; i++)
{
if (strlen(str[i]) == strlen(str[i - 1]))
continue;
else if (strlen(str[i]) > strlen(str[i - 1]))
maxone = str[i];
}
return maxone;
}
WizCas 2005-11-02
  • 打赏
  • 举报
回复
好的~这里面还有一个模板函数就是找出一个数组里面最大的数:

//ex5.cpp --- The exercise 5 in 8.8 of C++ Primer Plus
//2005-11-2, WizCas
#include <iostream>
#include <cstring>
using namespace std;
template <class T>
T maxn(T ar[], int n);
template <> char * maxn(char * str[], int n);

int main()
{
int intar[6] = {1,4,5,67,324,533};
int maxint = maxn(intar, 6);
cout << maxint << endl;

double dblar[4] = {213.123, 1432.32, 321.654, 3242.9};
double maxdbl = maxn(dblar, 4);
cout << maxdbl << endl;

char * strings [5] =
{
"I'm WizCas.",
"I wanna sleep!",
"If I go, I'll kill you!",
"For the king! You dull!",
"That is impossible."
};
char * maxstr = maxn(char * strings[], 5);
cout << maxstr << endl;

system("pause");
return 0;
}

template <class T>
T maxn(T ar[], int n)
{
T maxone = 0;
for (int i = 0; i < n; i++)
if (ar[i] > maxone)
maxone = ar[i];
return maxone;
}

template<> char * maxn<char *>(char * str[], int n)
{
char * maxone = str[0];
for (int i = 1; i < n; i++)
{
if (strlen(str[i]) == strlen(str[i - 1]))
continue;
else if (strlen(str[i]) > strlen(str[i - 1]))
maxone = str[i];
}
return maxone;
}
wzjall 2005-11-02
  • 打赏
  • 举报
回复
将代码全贴出来看看

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧