C++中,字符串能否作为函数的参数?

C++中,字符串能否作为函数的参数?,第1张

当然可以,为什么这么问,你出错了?

//std::string转int方法

int stoi(string s)

{

int i;

stringstream ss;

ss << s;

ss >> i;

ssclear();

return i;

}

//给你贴个用string 做参数的方法,这个方法使用时要先判断string是否全为数字,如果有非数字部分,会出错

#include<stdioh>

#include<stringh>

void inputSTr(char args){

char temp[100]={0},str[100];

int b=0,c=0,d=0,e=0,i;

for(i=0;i<strlen(args);i++){

strncpy(temp, args+i, 1);

str[i] = args[i];

if(((int)str[i]>=97&&(int)str[i]<=122)||((int)str[i]>=65&&(int)str[i]<=90))

{

b+=1;

}

else if((int)str[i]==32)

{

c+=1;

}

else if(((int)str[i]>=48)&&((int)str[i]<=58))

{

d+=1;

}

else

{

e+=1;

}

}

printf("这个字符串中:字母有%d个,数字有%d个,空格有%d个,其它字符有%d个。\n",b,d,c,e);

}

void main(){

char x,input[100];

printf("请输入一个字符串:");

gets(input);

x=input;

inputSTr(x);

}

C++: Variant Length Argument List

有时候我们希望定义参数列表不确定的宏(Macro),比如打印Debug信息的宏。C/C++支持变长参数列表的函数,但是对于宏定义,有点小问题。

C99标准(注意这是C语言标准,不是C++标准)有一个__VA_ARGS__可以用在宏定义中表示参数列表中的“”部分,比如我们可以这样定义宏

#define MY_DEBUG(format, ) \

do { \

printf(format, __VA_ARGS__); \

while (0)

只可惜C++标准中没有规定支持__VAR_ARGS__,不过gcc和MSVC等编译器都支持,也是,能编译C++肯定能编译C,编译器厂商也乐得做过顺水人情在C++中多支持一个功能;)

如果实在觉得这样不稳,就怕那天code需要port到一个不支持__VAR_ARGS__的编译器上,还有一个方法,适用于“纯C++编译器”,ATL中的ATLTRACE实现用的也是这种方法

#define MY_DEBUG DebugClass()

class DebugClass

{

void __cdecl operator()(const char format, ) const

{

va_list ptr;

va_start(ptr, format);

vprintf(format, ptr);

va_end(ptr);

}

};

这种方法巧妙的利用了C++对()的重载能力,#define部分世纪上市建立了一个DebugClass类型的临时变量(注意后面的括号一定要有),然后调用了这个临时变量重载的operator()方法,即使编译器不支持__VA_ARGS__,它总得支持va_list/va_start/va_end这一套东西,把变长参数列表交给vprintf这样接受的函数取处理,当然也可以我们自己处理,不过似乎没必要费那个劲了。

其实还可以在DebugClass的构造函数中加上参数,就可以获得更多的Debug信息

#define MY_DEBUG DebugClass(__FILE__, __LINE__)

class DebugClass

{

DebugClass(const char file, int line)

: m_file(file), m_line(line)

{

}

void __cdecl operator()(const char format, ) const

{

printf("File: %s Line: %d \t", m_file, m_line);

va_list ptr;

va_start(ptr, format);

vprintf(format, ptr);

va_end(ptr);

}

const char m_file;

int m_line;

};

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12156115.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存