??xml version="1.0" encoding="utf-8" standalone="yes"?>99久久这里只有精品,蜜臀av性久久久久蜜臀aⅴ麻豆,久久国产精品无http://www.shnenglu.com/qywyh/category/675.html?>blogzh-cnMon, 19 May 2008 17:54:29 GMTMon, 19 May 2008 17:54:29 GMT60在多文g中编写用template函数http://www.shnenglu.com/qywyh/articles/9608.html?/dc:creator>?/author>Sun, 09 Jul 2006 08:38:00 GMThttp://www.shnenglu.com/qywyh/articles/9608.htmlhttp://www.shnenglu.com/qywyh/comments/9608.htmlhttp://www.shnenglu.com/qywyh/articles/9608.html#Feedback0http://www.shnenglu.com/qywyh/comments/commentRss/9608.htmlhttp://www.shnenglu.com/qywyh/services/trackbacks/9608.html// mytemplate.h 文g

#ifndef _MYTEMPLATE_H_
#define _MYTEMPLATE_H_

template<typename _T>
class mytemplate{
    T val;
public:
    void display();
}
#include "mytemplate.cpp"
#endif

// 文g mytemplate.cpp

#ifdef _MYTEMPLATE_H_
template<typename T>
void mytemplate<T>::display(){
     cout<<val<<endl;
}
#endif


q样做的好处是我只需改变一个地方就可以使模板有不同的实玎ͼ避免?br />把不同的实现攑֜同一个文仉旉以避免的预编译标?那些预编译标?br />常常很难用,因ؓC它们都很ȝ),而且文g短小Q阅ȝ护v来更
方便(一个例子是你需要比较模板的不同实现的综合性能?把它的几个实?br />都写C个文仉常常会把人搞p涂).
不管怎样?E序必须在声明模板实例以前就"看见"了模板的实现部分

]]>
map 用法http://www.shnenglu.com/qywyh/articles/3715.html?/dc:creator>?/author>Sat, 04 Mar 2006 06:45:00 GMThttp://www.shnenglu.com/qywyh/articles/3715.htmlhttp://www.shnenglu.com/qywyh/comments/3715.htmlhttp://www.shnenglu.com/qywyh/articles/3715.html#Feedback0http://www.shnenglu.com/qywyh/comments/commentRss/3715.htmlhttp://www.shnenglu.com/qywyh/services/trackbacks/3715.html#include<iostream>
#include<map>
#include<string>
#include<iterator>
using   namespace   std;
typedef   map<string,string>maps;
typedef   pair<string,string>pr;
int   main()
{
maps   temp;
temp.insert(pr("aa","aaaaa"));
temp.insert(pr("bb","bbbbbb"));
temp.insert(pr("cc","cccc"));
maps   tent;
maps::iterator   it;
for(it=temp.begin();it!=temp.end();++it)tent.insert(*it);
for(it=tent.begin();it!=tent.end();++it)
{
cout<<(*it).first<<"   "<<(*it).second<<endl;
}
return   0;
}



]]>
搜烦函数http://www.shnenglu.com/qywyh/articles/3714.html?/dc:creator>?/author>Sat, 04 Mar 2006 06:26:00 GMThttp://www.shnenglu.com/qywyh/articles/3714.htmlhttp://www.shnenglu.com/qywyh/comments/3714.htmlhttp://www.shnenglu.com/qywyh/articles/3714.html#Feedback0http://www.shnenglu.com/qywyh/comments/commentRss/3714.htmlhttp://www.shnenglu.com/qywyh/services/trackbacks/3714.html  



cryptQ将密码或数据编码)
相关函数
getpass
表头文g
#define _XOPEN_SOURCE
#include<unistd.h>
定义函数
char * crypt (const char *key,const char * salt);
函数说明
crypt()用Data Encryption Standard(DES)演算法将参数key所指的字符串加以编码,key字符串长度仅取前8个字W,过此长度的字符没有意义。参数saltZ个字W组成的字符Ԍ由a-z、A-Z?-9Q?”和?”所l成Q用来决定?096 U不同内格的哪一个。函数执行成功后会返回指向编码过的字W串指针Q参数key 所指的字符串不会有所更动。编码过的字W串长度?3 个字W,前两个字Wؓ参数salt代表的字W串?BR>
q回?
q回一个指向以NULLl尾的密码字W串?BR>
附加说明
使用GCC~译旉?lcrypt?BR>
范例
#include<unistd.h>
main()
{
char passwd[13];
char *key;
char slat[2];
key= getpass(“Input First Password:?;
slat[0]=key[0];
slat[1]=key[1];
strcpy(passwd,crypt(key slat));
key=getpass(“Input Second Password:?;
slat[0]=passwd[0];
slat[1]=passwd[1];
printf(“After crypt(),1st passwd :%s\n?passwd);
printf(“After crypt(),2nd passwd:%s \n?crypt(key slat));
}
执行
Input First Password: /* 输入testQ编码后存于passwd[ ] */
Input Second Password /*输入testQ密码相同编码后也会相同*/
After crypt () 1st Passwd : teH0wLIpW0gyQ
After crypt () 2nd Passwd : teH0wLIpW0gyQ
 



bsearchQ二元搜索)
相关函数
qsort
表头文g
#include<stdlib.h>
定义函数
void *bsearch(const void *key,const void *base,size_t nmemb,size_tsize,int (*compar) (const void*,const void*));
函数说明
bsearch()利用二元搜烦从排序好的数l中查找数据。参数key指向Ʋ查扄关键数据Q参数base指向要被搜烦的数l开头地址Q参数nmemb 代表数组中的元素数量Q每一元素的大则由参数size军_Q最后一参数compar Z函数指针Q这个函数用来判断两个元素之间的大小关系Q若传给compar 的第一个参数所指的元素数据大于W二个参数所指的元素数据则必d传大? 的|两个元素数据相等则回??BR>
附加说明
扑ֈ关键数据则返回找到的地址Q如果在数组中找不到关键数据则返回NULL?BR>
范例
#include<stdio.h>
#include<stdlib.h>
#define NMEMB 5
#define SIZE 10
int compar(const void *a,const void *b)
{
return (strcmp((char *)a,(char *)b));
}
main()
{
char data[50][size]={“linux?”freebsd?”solaris?”sunos?”windows”};
char key[80],*base ,*offset;
int i, nmemb=NMEMB,size=SIZE;
while(1){
printf(?gt;?;
fgets(key,sizeof(key),stdin);
key[strlen(key)-1]=’\0?
if(!strcmp(key,”exit?)break;
if(!strcmp(key,”list?){
for(i=0;i<nmemb;i++)
printf(?s\n?data[i]);
continue;
}
base = data[0];
qsort(base,nmemb,size,compar);
offset = (char *) bsearch(key,base,nmemb,size,compar);
if( offset = =NULL){
printf(?s not found!\n?key);
strcpy(data[nmemb++],key);
printf(“Add %s to data array\n?key);
}else{
printf(“found: %s \n?offset);
}
}
}
执行
>hello /*输入hello字符?/
hello not found! /*找不到hello 字符?/
add hello to data array /*hello字符串加?/
>.list /*列出所有数?/
freebsd
linux
solaris
sunos
windows
hello
>hello
found: hello
 



lfindQ线性搜索)
相关函数
lsearch
表头文g
#include<stdlib.h>
定义函数
void *lfind (const void *key,const void *base,size_t *nmemb,size_t
size,int(* compar) (const void * ,const void *));
函数说明
lfind()利用U性搜索在数组中从头至一w查找数据。参数key指向Ʋ查扄关键数据Q参数base指向要被搜烦的数l开头地址Q参数nmemb代表数组中的元素数量Q每一元素的大则由参数size军_Q最后一参数comparZ函数指针Q这个函数用来判断两个元素是否相同,若传lcompar 的异C参数所指的元素数据和第二个参数所指的元素数据相同时则q回0Q两个元素数据不相同则返回非0倹{Lfind()与lsearch()不同点在于,当找不到关键数据时lfind()仅会q回NULLQ而不会主动把该笔数据加入数组?BR>
q回?
扑ֈ关键数据则返回找到的该笔元素的地址Q如果在数组中找不到关键数据则返回空指针(NULL)?BR>
范例
参考lsearch()?BR>  



lsearchQ线性搜索)
相关函数
lfind
表头文g
#include<stdlib.h>
定义函数
void *lsearch(const void * key ,const void * base ,size_t * nmemb,size_t size, int ( * compar) (const void * ,const void *));
函数说明
lsearch()利用U性搜索在数组中从头至一w查找数据。参数key指向Ʋ查扄关键数据Q参数base指向要被搜烦的数l开头地址Q参数nmemb 代表数组中的元素数量Q每一元素的大则由参数size 军_Q最后一参数compar Z函数指针Q这个函数用来判断两个元素是否相同,若传lcompar 的第一个参数所指的元素数据和第二个参数所指的元素数据相同时则q回0Q两个元素数据不相同则返回非0 倹{如果lsearchQ)找不到关键数据时会主动把该项数据加入数组里?BR>
q回?
扑ֈ关键数据则返回找到的该笔元素的四肢,如果在数l中找不到关键数据则此关键数据加入数组Q再把加入数l后的地址q回?BR>
范例
#include<stdio.h>
#include<stdlib.h>
#define NMEMB 50
#define SIZE 10
int compar (comst void *a,const void *b)
{
return (strcmp((char *) a, (char *) b));
}
main()
{
char data[NMEMB][SIZE]={“Linux?”freebsd?”solzris?”sunos?”windows”};
char key[80],*base,*offset;
int i, nmemb=NMEMB,size=SIZE;
for(i=1;i<5;i++){
fgets(key,sizeof9key),stdin);
key[strlen(key)-1]=’\0?
base = data[0];
offset = (char *)lfind(key,base,&nmemb,size,compar);
if(offset ==NULL){
printf(?s not found!\n?key);
offset=(char *) lsearch(key,base,&nmemb,size,compar);
printf(“Add %s to data array\n?offset);
}else{
printf(“found : %s \n?offset);
}
}
}
执行
linux
found:linux
os/2
os/2 not found!
add os/2 to data array
os/2
found:os/2
 



qsortQ利用快速排序法排列数组Q?
相关函数
bsearch
表头文g
#include<stdlib.h>
定义函数
void qsort(void * base,size_t nmemb,size_t size,int ( * compar)(const void *, const void *));
函数说明
参数base指向Ʋ排序的数组开头地址Q参数nmemb代表数组中的元素数量Q每一元素的大则由参数size军_Q最后一参数comparZ函数指针Q这个函数用来判断两个元素间的大关p,若传lcompar的第一个参数所指的元素数据大于W二个参数所指的元素数据则必d传大于零的|两个元素数据相等则回??BR>
q回?

附加说明

范例
#define nmemb 7
#include <stdlib.h>
int compar (const void *a ,const void *b)
{
int *aa=(int * ) a,*bb = (int * )b;
if( * aa >* bb)return 1;
if( * aa == * bb) return 0;
if( * aa < *bb) return -1;
}
main( )
{
int base[nmemb]={ 3,102,5,-2,98,52,18};
int i;
for ( i=0; i<nmemb;i++)
printf(?d ?base[i]);
printf(“\n?;
qsort(base,nmemb,sizeof(int),compar);
for(i=0;i<nmemb;i++)
printf(?d”base[i]);
printf(“\n?;
}
执行
3 102 5 -2 98 52 18
-2 3 5 18 52 98 102
 



randQ生随机数Q?
相关函数
srandQrandomQsrandom
表头文g
#include<stdlib.h>
定义函数
int rand(void)
函数说明
rand()会返回一随机数|范围?至RAND_MAX 间。在调用此函C生随机数前,必须先利用srand()讑֥随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子ؓ1。关于随机数U子请参考srand()?BR>
q回?
q回0至RAND_MAX之间的随机数|RAND_MAX定义在stdlib.hQ其gؓ2147483647?BR>
范例
/* 产生介于1 ?0 间的随机数|此范例未N机数U子Q完整的随机C生请参?BR>srandQ)*/
#include<stdlib.h>
main()
{
int i,j;
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf(?d ?j);
}
}
执行
9 4 8 8 10 2 4 8 3 6
9 4 8 8 10 2 4 8 3 6
 



srandQ设|随机数U子Q?
相关函数
randQrandom srandom
表头文g
#include<stdlib.h>
定义函数
void srand (unsigned int seed);
函数说明
srand()用来讄rand()产生随机数时的随机数U子。参数seed必须是个整数Q通常可以利用geypid()或time(0)的返回值来当做seed。如果每ơseed都设相同|rand()所产生的随机数值每ơ就会一栗?BR>
q回?

范例
/* 产生介于1 ?0 间的随机数|此范例与执行l果可与randQ)参照*/
#include<time.h>
#include<stdlib.h>
main()
{
int i,j;
srand((int)time(0));
for(i=0;i<10;i++)
{
j=1+(int)(10.0*rand()/(RAND_MAX+1.0));
printf(?%d ?j);
}
}
执行
5 8 8 8 10 2 10 8 9 9
2 9 7 4 10 3 2 10 8 7
 



]]>
qsort函数应用大全(?http://www.shnenglu.com/qywyh/articles/3405.html?/dc:creator>?/author>Wed, 22 Feb 2006 05:45:00 GMThttp://www.shnenglu.com/qywyh/articles/3405.htmlhttp://www.shnenglu.com/qywyh/comments/3405.htmlhttp://www.shnenglu.com/qywyh/articles/3405.html#Feedback1http://www.shnenglu.com/qywyh/comments/commentRss/3405.htmlhttp://www.shnenglu.com/qywyh/services/trackbacks/3405.html
<本文中排序都是采用的从小到大排序>

一、对intcd数组排序

int num[100];

Sample:

int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}

qsort(num,100,sizeof(num[0]),cmp);

二、对charcd数组排序Q同intcdQ?

char word[100];

Sample:

int cmp( const void *a , const void *b )
{
return *(char *)a - *(int *)b;
}

qsort(word,100,sizeof(word[0]),cmp);

三、对doublecd数组排序Q特别要注意Q?

double in[100];

int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;
}

qsort(in,100,sizeof(in[0]),cmp)Q?

四、对l构体一U排?

struct In
{
double data;
int other;
}s[100]

//按照data的g到大将l构体排?关于l构体内的排序关键数据data的类型可以很多种Q参考上面的例子?

int cmp( const void *a ,const void *b)
{
return (*(In *)a)->data > (*(In *)b)->data ? 1 : -1;
}

qsort(s,100,sizeof(s[0]),cmp);

五、对l构体二U排?

struct In
{
int x;
int y;
}s[100];

//按照x从小到大排序Q当x相等时按照y从大到小排序

int cmp( const void *a , const void *b )
{
struct In *c = (In *)a;
struct In *d = (In *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
}

qsort(s,100,sizeof(s[0]),cmp);

六、对字符串进行排?

struct In
{
int data;
char str[100];
}s[100];

//按照l构体中字符串str的字兔R序排?

int cmp ( const void *a , const void *b )
{
return strcmp( (*(In *)a)->str , (*(In *)b)->str );
}

qsort(s,100,sizeof(s[0]),cmp);

七、计几何中求凸包的cmp

int cmp(const void *a,const void *b) //重点cmp函数Q把除了1点外的所有点Q旋转角度排?
{
struct point *c=(point *)a;
struct point *d=(point *)b;
if( calc(*c,*d,p[1]) < 0) return 1;
else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) //如果在一条直U上Q则把远的放在前?
return 1;
else return -1;
}

PS:

其中的qsort函数包含?lt;stdlib.h>的头文g里,strcmp包含?lt;string.h>的头文g?img src ="http://www.shnenglu.com/qywyh/aggbug/3405.html" width = "1" height = "1" />

]]>
字符串与C间{换函?/title><link>http://www.shnenglu.com/qywyh/articles/3404.html</link><dc:creator>?/dc:creator><author>?/author><pubDate>Wed, 22 Feb 2006 05:44:00 GMT</pubDate><guid>http://www.shnenglu.com/qywyh/articles/3404.html</guid><wfw:comment>http://www.shnenglu.com/qywyh/comments/3404.html</wfw:comment><comments>http://www.shnenglu.com/qywyh/articles/3404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qywyh/comments/commentRss/3404.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qywyh/services/trackbacks/3404.html</trackback:ping><description><![CDATA[<TABLE width="100%"> <TBODY> <TR> <TD vAlign=top width=80>  <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc14></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR>atofQ将字符串{换成点型数Q?</FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>atoiQatolQstrtodQstrtolQstrtoul<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文g </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>#include <stdlib.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>double atof(const char *nptr);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>atof()会扫描参数nptr字符Ԍ跌前面的空格字W,直到遇上数字或正负符h开始做转换Q而再遇到非数字或字符串结束时('\0')才结束{换,q将l果q回。参数nptr字符串可包含正负受小数点或E(e)来表C指数部分,?23.456?23e-2?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>q回?</FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>q回转换后的点型数?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>atof()与用strtod(nptr,(char**)NULL)l果相同?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>/* 字W串a 与字W串b转换成数字后相加*/<BR>#include<stdlib.h><BR>main()<BR>{<BR>char *a=?100.23?<BR>char *b=?00e-2?<BR>float c;<BR>c=atof(a)+atof(b);<BR>printf(“c=%.2f\n?c);<BR>}<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>c=-98.23<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80>  <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc15></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR>atoiQ将字符串{换成整型敎ͼ </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>atofQatolQatrtodQstrtolQstrtoul<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文g </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>#include<stdlib.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>int atoi(const char *nptr);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>atoi()会扫描参数nptr字符Ԍ跌前面的空格字W,直到遇上数字或正负符h开始做转换Q而再遇到非数字或字符串结束时('\0')才结束{换,q将l果q回?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>q回?</FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>q回转换后的整型数?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>atoi()与用strtol(nptrQ?char**)NULLQ?0)Q结果相同?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>/* 字W串a 与字W串b转换成数字后相加*/<BR>#include<stdlib.h><BR>mian()<BR>{<BR>char a[]=?100?<BR>char b[]=?56?<BR>int c;<BR>c=atoi(a)+atoi(b);<BR>printf(c=%d\n?c);<BR>}<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>c=356<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80>  <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc16></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR>atolQ将字符串{换成长整型数Q?</FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>atofQatoiQstrtodQstrtolQstrtoul<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文g </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>#include<stdlib.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>long atol(const char *nptr);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>atol()会扫描参数nptr字符Ԍ跌前面的空格字W,直到遇上数字或正负符h开始做转换Q而再遇到非数字或字符串结束时('\0')才结束{换,q将l果q回?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>q回?</FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>q回转换后的长整型数?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>atol()与用strtol(nptr,(char**)NULL,10)Q结果相同?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>/*字W串a与字W串b转换成数字后相加*/<BR>#include<stdlib.h><BR>main()<BR>{<BR>char a[]=?000000000?<BR>char b[]=?234567890?<BR>long c;<BR>c=atol(a)+atol(b);<BR>printf(“c=%d\n?c);<BR>}<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>c=1234567890<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80>  <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc17></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR>gcvtQ将点型数转换为字W串Q取四舍五入Q?</FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>ecvtQfcvtQsprintf<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文g </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>#include<stdlib.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>char *gcvt(double numberQsize_t ndigitsQchar *buf);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>gcvt()用来参数number转换成ASCII码字W串Q参数ndigits表示昄的位数。gcvt()与ecvt()和fcvt()不同的地方在于,gcvt()所转换后的字符串包含小数点或正负符受若转换成功Q{换后的字W串会放在参数buf指针所指的I间?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>q回?</FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>q回一字符串指针,此地址即ؓbuf指针?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>#include<stdlib.h><BR>main()<BR>{<BR>double a=123.45;<BR>double b=-1234.56;<BR>char *ptr;<BR>int decpt,sign;<BR>gcvt(a,5,ptr);<BR>printf(“a value=%s\n?ptr);<BR>ptr=gcvt(b,6,ptr);<BR>printf(“b value=%s\n?ptr);<BR>}<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>a value=123.45<BR>b value=-1234.56<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80>  <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc18></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR>strtodQ将字符串{换成点敎ͼ </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>atoiQatolQstrtodQstrtolQstrtoul<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文g </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>#include<stdlib.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>double strtod(const char *nptr,char **endptr);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>strtod()会扫描参数nptr字符Ԍ跌前面的空格字W,直到遇上数字或正负符h开始做转换Q到出现非数字或字符串结束时('\0')才结束{换,q将l果q回。若endptr不ؓNULLQ则会将遇到不合条g而终止的nptr中的字符指针由endptr传回。参数nptr字符串可包含正负受小数点或E(e)来表C指数部分。如123.456?23e-2?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>q回?</FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>q回转换后的点型数?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>参考atof()?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>/*字W串aQbQc 分别采用10Q?Q?6 q制转换成数?/<BR>#include<stdlib.h><BR>mian()<BR>{<BR>char a[]=?000000000?<BR>char b[]=?000000000?<BR>char c[]=”ffff?<BR>printf(“a=%d\n?strtod(a,NULL,10));<BR>printf(“b=%d\n?strtod(b,NULL,2));<BR>printf(“c=%d\n?strtod(c,NULL,16));<BR>}<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>a=1000000000<BR>b=512<BR>c=65535<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80>  <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc19></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR>strtolQ将字符串{换成长整型数Q?</FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>atofQatoiQatolQstrtodQstrtoul<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文g </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>#include<stdlib.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>long int strtol(const char *nptr,char **endptr,int base);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>strtol()会将参数nptr字符串根据参数base来{换成长整型数。参数base范围??6Q或0。参数base代表采用的进制方式,如basegؓ10则采?0q制Q若basegؓ16则采?6q制{。当basegؓ0时则是采?0q制做{换,但遇到如'0x'前置字符则会使用16q制做{换。一开始strtol()会扫描参数nptr字符Ԍ跌前面的空格字W,直到遇上数字或正负符h开始做转换Q再遇到非数字或字符串结束时('\0')l束转换Qƈ结果返回。若参数endptr不ؓNULLQ则会将遇到不合条g而终止的nptr中的字符指针由endptrq回?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>q回?</FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>q回转换后的长整型数Q否则返回ERANGEq将错误代码存入errno中?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>ERANGE指定的{换字W串出合法范围?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>/* 字W串aQbQc 分别采用10Q?Q?6q制转换成数?/<BR>#include<stdlib.h><BR>main()<BR>{<BR>char a[]=?000000000?<BR>char b[]=?000000000?<BR>char c[]=”ffff?<BR>printf(“a=%d\n?strtol(a,NULL,10));<BR>printf(“b=%d\n?strtol(b,NULL,2));<BR>printf(“c=%d\n?strtol(c,NULL,16));<BR>}<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>a=1000000000<BR>b=512<BR>c=65535<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80>  <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc20></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR>strtoulQ将字符串{换成无符号长整型敎ͼ </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>atofQatoiQatolQstrtodQstrtol<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文g </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>#include<stdlib.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>unsigned long int strtoul(const char *nptr,char **endptr,int base);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>strtoul()会将参数nptr字符串根据参数base来{换成无符L长整型数。参数base范围??6Q或0。参数base代表采用的进制方式,如basegؓ10则采?0q制Q若basegؓ16则采?6q制数等。当basegؓ0时则是采?0q制做{换,但遇到如'0x'前置字符则会使用16q制做{换。一开始strtoul()会扫描参数nptr字符Ԍ跌前面的空格字W串Q直到遇上数字或正负W号才开始做转换Q再遇到非数字或字符串结束时('\0')l束转换Qƈ结果返回。若参数endptr不ؓNULLQ则会将遇到不合条g而终止的nptr中的字符指针由endptrq回?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>q回?</FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>q回转换后的长整型数Q否则返回ERANGEq将错误代码存入errno中?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>ERANGE指定的{换字W串出合法范围?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>参考strtol()<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80>  <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc21></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR>toasciiQ将整型数{换成合法的ASCII 码字W) </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>isasciiQtoupperQtolower<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文g </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>#include<ctype.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>int toascii(int c)<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>toascii()会将参数c转换?位的unsigned char|W八位则会被清除Q此字符即会被{成ASCII码字W?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>q回?</FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>{换成功的ASCII码字WD回?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>#include<stdlib.h><BR>main()<BR>{<BR>int a=217;<BR>char b;<BR>printf(“before toascii () : a value =%d(%c)\n?a,a);<BR>b=toascii(a);<BR>printf(“after toascii() : a value =%d(%c)\n?b,b);<BR>}<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>before toascii() : a value =217()<BR>after toascii() : a value =89(Y)<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80>  <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc22></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR>tolowerQ将大写字母转换成小写字母) </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>isalphaQtoupper<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文g </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>#include<stdlib.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>int tolower(int c);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>若参数c为大写字母则该对应的小写字母返回?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>q回?</FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>q回转换后的写字母Q若不须转换则将参数cD回?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>/* s字符串内的大写字母{换成写字母*/<BR>#include<ctype.h><BR>main()<BR>{<BR>char s[]=”aBcDeFgH12345;!#$?<BR>int i;<BR>printf(“before tolower() : %s\n?s);<BR>for(i=0;I<sizeof(s);i++)<BR>s[i]=tolower(s[i]);<BR>printf(“after tolower() : %s\n?s);<BR>}<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>before tolower() : aBcDeFgH12345;!#$<BR>after tolower() : abcdefgh12345;!#$<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80>  <DIV align=right><BR><FONT face=宋体 size=2><A name=linuxc23></A></FONT></DIV></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR>toupperQ将写字母转换成大写字母) </FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>isalphaQtolower<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>表头文g </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>#include<ctype.h><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>int toupper(int c);<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>若参数c为小写字母则该Ҏ的大写字母返回?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>q回?</FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>q回转换后的大写字母Q若不须转换则将参数cD回?BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2><BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>/* s字符串内的小写字母{换成大写字母*/<BR>#include<ctype.h><BR>main()<BR>{<BR>char s[]=”aBcDeFgH12345;!#$?<BR>int i;<BR>printf(“before toupper() : %s\n?s);<BR>for(i=0;I<sizeof(s);i++)<BR>s[i]=toupper(s[i]);<BR>printf(“after toupper() : %s\n?s);<BR>}<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80> <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD> <TD vAlign=top><FONT face=宋体 size=2>before toupper() : aBcDeFgH12345;!#$<BR>after toupper() : ABCDEFGH12345;!#$<BR></FONT></TD></TR> <TR> <TD vAlign=top width=80>  <DIV align=right><BR></DIV></TD></TR></TBODY></TABLE><img src ="http://www.shnenglu.com/qywyh/aggbug/3404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qywyh/" target="_blank">?/a> 2006-02-22 13:44 <a href="http://www.shnenglu.com/qywyh/articles/3404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>I/O控?/title><link>http://www.shnenglu.com/qywyh/articles/3340.html</link><dc:creator>?/dc:creator><author>?/author><pubDate>Sun, 19 Feb 2006 15:59:00 GMT</pubDate><guid>http://www.shnenglu.com/qywyh/articles/3340.html</guid><wfw:comment>http://www.shnenglu.com/qywyh/comments/3340.html</wfw:comment><comments>http://www.shnenglu.com/qywyh/articles/3340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/qywyh/comments/commentRss/3340.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/qywyh/services/trackbacks/3340.html</trackback:ping><description><![CDATA[<STRONG>I/O控Ӟ<BR></STRONG>(1)控制点数值显C可?EM>setprecision(n)</EM> 控制输出显CQҎ的数字个敎ͼ默认输出有效gؓ6位?BR>   <EM>setiosflags(ios::fixed) </EM>用定Ҏ式表C实?BR>   <EM>seiosflags(ios::scientific) </EM>用指数方式表C实?BR><FONT size=+0>       </FONT>setiosflags(ios::fixed)与seiosflags(ios::scientific)都可以和setprecision(n)合用Q其效果分别为:控制数点右边的数字个数Q控制指数表C法的小C数?BR>   在用点表示的输ZQsetprecision(n)表示有效位数?BR>   在用定点表示的输ZQsetprecision(n)表示数位数?BR>   在用指数形式输出Ӟsetprecision(n)表示数位数?BR>   数位数截短昄Ӟq行4?入处理?BR>// 试环境QVisual Studio.net 2003 C++<EM><BR></EM>#include "stdafx.h"<BR>#include <iomanip><BR>#using <mscorlib.dll><BR>using namespace System;<BR>using namespace std;<BR>void _tmain()<BR>{<BR>     double amount=22.0/7;<BR>     cout <<amount <<endl;<BR>     cout <<setprecision(1) <<amount <<endl<BR>          <<setprecision(2) <<amount <<endl<BR>          <<setprecision(3) <<amount <<endl<BR>          <<setprecision(4) <<amount <<endl;<BR>     <BR>        cout <<setiosflags(ios::fixed);<BR>     cout <<setprecision(8) <<amount <<endl;<BR>     <BR>        cout <<setiosflags(ios::scientific) <<amount <<endl;  // setiosflags(ios::fixed)定义在setiosflags(ios::scientific)前则指数形式不能被正的输出?BR>     <BR>        cout <<setprecision(6);<BR>}<BR><FONT size=+0> <BR></FONT>(2)左右寚w输出可用<EM>setiosflags(ios::left)</EM>?EM>setiosflags(ios::right)</EM>实现?BR>#include "stdafx.h"<BR>#include <iomanip><BR>#using <mscorlib.dll><BR>using namespace System;<BR>using namespace std;<BR>void _tmain()<BR>{<BR>     cout <<setiosflags(ios::right)  // 交换setiosflags(ios::right)与setiosflags(ios::left)的位|可以实现先左后叛_齐,否则都位叛_?BR>          <<setw(5) <<1<BR>          <<setw(5) <<2<BR>          <<setw(5) <<3 <<endl;<BR>     cout <<setiosflags(ios::left)<BR>          <<setw(5) <<1<BR>          <<setw(5) <<2<BR>          <<setw(5) <<3 <<endl;<BR>}<BR> <BR>(3)讄填充字符可用<EM>setw</EM>?EM>setfill</EM>实现?EM>setw</EM>用来定昄的宽度,<EM>setfill</EM>用来定一个非I格的特别字W(讄填充的字W)?BR>(4)强制昄数点和W号可用<EM>setiosflags(ios::showpoint) </EM>?EM>setiosflags(ios::showpos) </EM>实现?img src ="http://www.shnenglu.com/qywyh/aggbug/3340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/qywyh/" target="_blank">?/a> 2006-02-19 23:59 <a href="http://www.shnenglu.com/qywyh/articles/3340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++指针探讨 (? 函数指针 - -http://www.shnenglu.com/qywyh/articles/2141.html?/dc:creator>?/author>Mon, 26 Dec 2005 10:15:00 GMThttp://www.shnenglu.com/qywyh/articles/2141.htmlhttp://www.shnenglu.com/qywyh/comments/2141.htmlhttp://www.shnenglu.com/qywyh/articles/2141.html#Feedback0http://www.shnenglu.com/qywyh/comments/commentRss/2141.htmlhttp://www.shnenglu.com/qywyh/services/trackbacks/2141.htmlC++指针探讨 (? 函数指针 - -

    ------转蝲沐枫's blog                                   

    在C/C++中,数据指针是最直接Q也最常用的,因此Q理解v来也比较Ҏ。而函数指针,作ؓq行时动态调用(比如回调函数 CallBack FunctionQ是一U常见的Q而且是很好用的手D,不能不好好认识一番?/P>

    接下来,我们pZ下函数指针?BR>   
    2 常规函数指针(隑ֺ: 3)
        void(*fp)();
        fp 是一个典型的函数指针Q用于指向无参数Q无q回值的函数?BR>        void(*fp2)(int);
        fp2 也是一个函数指针,用于指向有一个整型参敎ͼ无返回值的函数?BR>        当然Q有l验人士一般都会徏议用typedef来定义函数指针的cdQ如Q?BR>        typedef void(* FP)();
        FP fp3; // 和上面的fp一L定义?BR>        函数指针之所以让初学者畏惧,最主要的原因是它的括号太多了;某些用途的函数指针Q往往会让人陷在括号堆中出不来Q这里就不D例了Q因Z是本文讨论的范围Qtypedef Ҏ可以有效的减括L数量Q以及理清层ơ,所以受到推荐。本文暂时只考虑单的函数指针Q因此暂不用到typedef?BR>       
        假如有如下两个函敎ͼ
  void f1()
  {
      std::cout << "call f " << std::endl;
  }
  
  void f2(int a)
  {
      std::cout << "call f2( " << a << " )" << std::endl;
  }
  
  现在需要通过函数指针来调用,我们需要给指针指定函数Q?BR>  fp = &f1; // 也可以用Qfp = f1;
  fp2= &f2; // 也可以用Qfp2= f2;
  void (*fp3)() = &f1; // 也可以用Qvoid (*fp3)() = f1;  
  调用时如下:
  fp(); // ?(*fp)();
  fp2(1); // ?(*fp2)(1);
  fp3();  // ?(*fp3)();
  对于此两U调用方法,效果完全一P我推荐用前一U。后一U不仅仅是多打了键盘Q而且也损׃一些灵zL。这里暂且不说它?BR>  
  C++cd安全。也是_不同cd的变量是不能直接赋值的Q否则轻则警告,重则报错。这是一个很有用的特性,常常能帮我们扑ֈ问题。因此,有识之士认ؓQC++中的M一外警告都不能忽视。甚x人提出,~译的时候不能出CQ何警告信息,也就是说Q警告应该当作错误一样处理?BR>  
  比如Q我们把f1赋值给fp2Q那么C++~译?vc7.1)׃报错Q?BR>  fp2 = &f1; // error C2440: ??: 无法从“void (__cdecl *)(void)”{换ؓ“void (__cdecl *)(int)?BR>  fp1 = &f1; // OK
  
  q样Q编译器可以帮我们找出编码上的错误,节省了我们的排错旉。C++~译器正致力于这一炏V?BR>  
  考虑一下C++标准模板库的sort函数Q?BR>  // 快速排序函?BR>  template
     void sort(
        RandomAccessIterator _First, // 需排序数据的第一个元素位|?BR>        RandomAccessIterator _Last,  // 需排序数据的最后一个元素位|(不参与排序)
        BinaryPredicate _Comp     // 排序使用的比较算?可以是函数指针、函数对象等)
     );

  比如Q我们有一个整型数l:
  int n[5] = {3,2,1,8,9};
  要对它进行升序排序,我们需定义一个比较函敎ͼ
  bool less(int a, int b)
  {
      return a < b; // 感谢|友指出W误之处。原?return a-b 是错误的?BR>  }
  然后用:
  sort(n, n+5, less);
  
  要是惛_它进行降序排序,我们只要换一个比较函数就可以了:
  bool great(int a, int b)
  {
   return b < a; // 感谢|友指出W误之处。原?return b-a 是错误的?BR>
  }     
  sort(n, n+5, great);
  
  q样Q不需要改变sort函数的定义,可以按LҎq行排序Q是不是很灵z?  
  q种用法以C++的标准模板库(STL)中非常流行。另外,操作pȝ中也l常使用回调(CallBack)函数Q实际上Q所谓回调函敎ͼ本质是函数指针?/P>

Q附注)
本文中ؓ了说明函数指针,使用了less和greatq两个函数。在C/C++的标准模板库中已l有相应的函数可以直接用,不需要自已定义?BR>



]]>
C++指针探讨 (-) 数据指针http://www.shnenglu.com/qywyh/articles/2140.html?/dc:creator>?/author>Mon, 26 Dec 2005 10:12:00 GMThttp://www.shnenglu.com/qywyh/articles/2140.htmlhttp://www.shnenglu.com/qywyh/comments/2140.htmlhttp://www.shnenglu.com/qywyh/articles/2140.html#Feedback0http://www.shnenglu.com/qywyh/comments/commentRss/2140.htmlhttp://www.shnenglu.com/qywyh/services/trackbacks/2140.htmlC++指针探讨 (-) 数据指针- -

   ------转蝲沐枫's blog                                   

    指针Q在C/C++语言中一直是很受宠的Q几乎找不到一个不使用指针的C/C++应用。用于存储数据和E序的地址Q这是指针的基本功能。用于指向整型数Q用整数指针(int*)Q指向QҎ用QҎ指针(float*)Q指向结构,用对应的l构指针(struct xxx *)Q指向Q意地址Q用无类型指?void*)?BR>    有时候,我们需要一些通用的指针。在C语言当中Q?void*) 可以代表一切;但是在C++中,我们q有一些比较特D的指针Q无法用(void*)来表C。事实上Q在C++中,xC个通用的指针,特别是通用的函数指针可是一个“不可能d”?BR>   
    C++是一U强cd的语aQC++的编译器的功能是强大的,它的其中一个设计目标,是尽力ؓE序扑ևE序中可能存在的问题Q因此,C++对类型的匚w是非怸格的。在C语言中,你可以用void*来指向一切;但在C++中,void*q不能指向一切,q能,也没有意义,因ؓ它不能帮你发现问题,比如Q用函数指针赋值给一个数据指针?BR>   
    下面我们来探讨一下,C++中如何存储各U类型的指针?BR>   
    1.  数据指针
     数据指针分ؓ两种Q常规数据指针和成员数据指针
     
    1.1 常规数据指针 (隑ֺ: 1)
     q个不用说明了,和C语言一P很简单,直接定义、赋值就够了。常见的有:int*, double* {等?BR>     如:
     int value = 123;
     int * pn = &value;
     
     
    1.2 成员数据指针 (隑ֺ: 4)
     有如下的l构Q?BR>     struct MyStruct
     {
       int key;
       int value;
     };
     
     现在有一个结构对?
     MyStruct me;
     
     我们需?value 成员的地址Q我们可以:
     int * pValue = &me.value;
     
     :) 没什么难的对吧?
     
     我们假设一下,现在有一个结构的指针Q?BR>     
     MyStruct* pMe = new MyStruct;
     现在Q我们要取得 pMe?value 的指针,要怎么做呢Q?BR>     int * ppValue = &pMe->value;
     
     :) q仍然很Ҏ?BR>     
     当然了,上面讨论的仍然是属于W一U范{?---常规数据指针?BR>     
     好了Q我们现在需要一U指针,它指向MyStruct中的M数据成员Q那么它应该是这L子:
     int MyStruct::* pMV = &MyStruct::value;
     ?BR>     int MyStruct::* pMK = &MyStruct::key;
     
     q种指针的用途是用于取得l构成员在结构内的地址。我们可以通过该指针来讉K成员数据Q?BR>     int value = pMe->*pMV; // 取得pMe的value成员数据?BR>     int value = me.*pMK; // 取得me的key成员数据?BR>     
     也许有h会问了,q种指针有什么用Q?BR>     实Q成员指针本来就不是一U很常用的指针。不q,在某些时候还是很有用处的。我们先来看看下面的一个函敎ͼ
     
  int sum(MyStruct* objs, int MyStruct::* pm, int count)
  {
      int result = 0;
      for(int i = 0; i < count; ++i)
          result += objs[i].*pm;
      return result;
  }
     
     q个函数的功能是什么,你能看明白吗Q它的功能就是,l定count个MyStructl构的指针,计算出给定成员数据的d。有Ҏ口对吧?看看下面的程序,你也许就明白了:
     
     MyStruct me[10] =
     {
      {1,2},{3,4},{5,6},{7,8},{9,10},{11,12},{13,14},{15,16},{17,18},{19,20}
     };
     
     int sum_value = sum(me, &MyStruct::value, 10);
     //计算10个MyStructl构的value成员的dQ?sum_value ??110     (2+4+6+8+...+20)
     
     int sum_key = sum(me, &MyStruct::key, 10);
     //计算10个MyStructl构的key成员的dQ?nbsp;  sum_key ??100       (1+3+5+7+...+19)
     
     
     也许Q你觉得用常规指针也可以做到Q而且更易懂。OkQ没问题Q?BR>     int sum_value(MyStruct* objs, int count)
     {
      int result = 0;
      for(int i = 0; i < count; ++i)
       result += objs[i].value;
      return result;
     }
     你是惌么做吗?但这么做Q你只能计算valueQ如果要key的话Q你要多写一个函数。有多少个成员需要计的话,你就要写多少个函敎ͼ多麻烦啊?BR>



]]>
Ʒþþø| ŷպƷþ| ݺݸɺݺݾþ| þùƷþþƷ| 91Ʒþþþþio| þۺϸþúݺ97ɫ| 2021ٸþþþþþþþ| ھƷþþþþþcoent| ӰԺ˾þ| þõӰ| 볬鱬Ļþ | ٸþþþþñŪ߳| Ƭѹۿþ| 볬鱬Ļþ | þþþþþƷѿSSS| þݺҹҹav˳| þֻоƷ4| ۺϾþþþ| ŷҹͽþþ| պþ| ˾þ111վ| ɫۺϾþ | һձþþ| Ļþ| wwwþ| þþƷwwwˬ| һɫþۺϺݺƪ| պһþþþþ| þþþþþ97| ĻƷѾþ| ƷþþþþþҹƬ| TOKYOۺϾþþƷ| þþþѾƷ| þˬˬAVƬ| þþƷAɫ| þþƷ99þþ| þþþAVۺ | ĻþӰԺ| պݺݾþ͵͵ɫۺ| þþþó˾Ʒ| þɫ|