• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            The Fourth Dimension Space

            枯葉北風(fēng)寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

            #

            優(yōu)先隊(duì)列priority_queue 實(shí)現(xiàn)哈弗曼樹WPL的計(jì)算

            #include<iostream>
            #include
            <queue>
            #include
            <functional>
            using namespace std;

            priority_queue
            <int,vector<int>,greater<int>>myqueue;

            int main ()
            {

                
            int n;
                
            int i;
                
            int sum=0;
                scanf(
            "%d",&n);
                
            for(i=1;i<=n;i++)
                
            {
                    
            int temp;
                    cin
            >>temp;
                    myqueue.push(temp);
                }

                
            while(myqueue.size()!=1)
                
            {
                    
            int temp;
                    temp
            =myqueue.top();
                    sum
            +=temp;
                    myqueue.pop();
                    temp
            =myqueue.top();
                    sum
            +=temp;
                    myqueue.pop();
                    myqueue.push(sum);
                    sum
            =0;
                }

                cout
            <<myqueue.top()<<endl;
                system(
            "pause");
                
            return 0;
            }

            posted @ 2009-03-28 23:24 abilitytao 閱讀(424) | 評論 (0)編輯 收藏

            POJ 1700-過河問題 經(jīng)典智力題

            題目描述:在漆黑的夜里,四位旅行者來到了一座狹窄而且沒有護(hù)欄的橋邊。如果不借助手電筒的話,大家是無論如何也不敢過橋去的。不幸的是,四個(gè)人一共只帶了一只手電筒,而橋窄得只夠讓兩個(gè)人同時(shí)過。如果各自單獨(dú)過橋的話,四人所需要的時(shí)間分別是1、2、5、8分鐘;而如果兩人同時(shí)過橋,所需要的時(shí)間就是走得比較慢的那個(gè)人單獨(dú)行動(dòng)時(shí)所需的時(shí)間。問題是,如何設(shè)計(jì)一個(gè)方案,讓這四人盡快過橋。

            解題思路:
            當(dāng)人數(shù)等于1,2,3的時(shí)候:答案很容易得出;
            當(dāng)人數(shù)大于等于4時(shí):

            若設(shè)過橋速度最快的那個(gè)人過橋時(shí)間為a,第二快為b;過橋第二慢的那個(gè)人過橋時(shí)間為y,最慢為z;
            此時(shí)有兩種過橋方案:
            一.最快和次快的人先過,然后最快的回來,然后最慢與次慢的人再過,次快的回來;
            二.最快的和最慢的過,快的回來,在和次慢的過,快的再回來;

            第一種方法時(shí)間為b*2+a+z
            第二種方法時(shí)間為y+z+2*a
            如果第一種大于第二種 有2*b+a+z>y+z+2*a
            化簡得
            2*b>y+a;
            此時(shí)只要比較2*b和a+y的大小即可知道那種方法更優(yōu) O(∩_∩)O~ 編程解決即可
            #include<iostream>
            #include
            <algorithm>
            #include
            <numeric>
            using namespace std;


            int a[1000];

            int main()
            {
                
            int testcase;
                
            int n;
                
            int i;
                
            int j;
                
            int sum=0;
                scanf(
            "%d",&testcase);
                
            for(j=1;j<=testcase;j++)
                
            {
                    sum
            =0;
                    scanf(
            "%d",&n);
                    
            for(i=1;i<=n;i++)
                        scanf(
            "%d",&a[i]);
                    sort(a
            +1,a+1+n);
                    
            while(n)
                    
            {
                        
                        
            if(n==1)
                        
            {
                            sum
            +=a[1];
                            n
            =0;
                        }

                        
            else if(n==2)
                        
            {
                            sum
            +=a[2];
                            n
            =0;
                        }

                        
            else if(n==3)
                        
            {
                            
                            sum
            +=(a[2]+a[3]+a[1]);
                            n
            =0;
                        }

                        
            else if(n>=4)
                        
            {
                            
                            
                            
            if(2*a[2]>a[1]+a[n-1])
                            
            {
                                sum
            +=(a[n-1]+a[n])+2*a[1];
                                n
            -=2;
                            }

                            
                            
            else
                            
            {
                                sum
            +=(a[2]+a[1]+a[n]+a[2]);
                                n
            -=2;
                            }

                        }

                        
                        
                    }

                    printf(
            "%d\n",sum);
                }

                system(
            "pause");
                
            return 0;
                
            }




            說句題外話,據(jù)說去年南大保研的面試題就是這道題,一模一樣,呵呵 只可惜我還沒到保研的時(shí)間。。。

            posted @ 2009-03-28 22:58 abilitytao 閱讀(3109) | 評論 (10)編輯 收藏

            POJ 2083-Fractal

            此題與上一題類似,一次AC;
            由于控制臺(tái)屏幕太小 這次我將結(jié)果保存在文件中;
            #include<iostream>
            #include
            <cmath>
            #include
            <algorithm>
            #include
            <cstdlib>
            #include
            <cstdio>
            #include
            <fstream>
            using namespace std;

            char mymap[2500][2500];

            int leftdot;
            int rightdot;
            int topdot;
            int bottomdot;


            void figure(int x,int y,int degree)
            {
                leftdot
            =min(leftdot,y);
                rightdot
            =max(rightdot,y);
                topdot
            =min(topdot,x);
                bottomdot
            =max(bottomdot,x);


                
            if(degree==1)
                
            {
                    mymap[x][y]
            ='X';
                }

                
            else
                
            {

                    
            int dis=(int)pow((double)3,degree-2)*2;
                    figure(x,y,degree
            -1);
                    figure(x,y
            +dis,degree-1);
                    figure(x
            +dis,y,degree-1);
                    figure(x
            +dis/2,y+dis/2,degree-1);
                    figure(x
            +dis,y+dis,degree-1);
                }




            }



            int main()
            {

                
            int n;
                
            int i,j;
                ofstream file;
                file.open(
            "test.txt");
                
            while(scanf("%d",&n))
                
            {
                    rightdot
            =-100000000;
                    leftdot
            =100000000;
                    topdot
            =1000000000;
                    bottomdot
            =-1000000000;
                    memset(mymap,
            ' ',sizeof(mymap));
                    
            if(n==-1)
                        
            break;
                    figure(
            1,1,n);
                    
            for(i=leftdot;i<=rightdot;i++)
                    
            {

                        
            for(j=topdot;j<=bottomdot;j++)
                            file
            <<mymap[i][j];
                        file
            <<endl;
                    }

                    file
            <<'-'<<endl;
                }

                file.close();
                
            return 0;
            }


            答案請見:/Files/abilitytao/test.txt

            posted @ 2009-03-27 23:44 abilitytao 閱讀(573) | 評論 (0)編輯 收藏

            POJ 1941-The Sierpinski Fractal 感悟遞歸之美^_^

            原題鏈接:http://162.105.81.212/JudgeOnline/problem?id=1941

            解題方法:剛開始拿到這道題,我的第一反應(yīng)是要一行一行的輸出,不過做了幾分鐘之后發(fā)現(xiàn):在題述意思下行與行之間似乎沒有規(guī)律可言;
            所以這種方法只能作罷;后來看了看discuss,有人提到用遞歸的方法來做這道題,這才恍然大悟:像種大問題嵌套類似之子問題的時(shí)候,遞歸不是最理想的方法么?
            開一個(gè)很大的二維矩陣(因?yàn)椴恢繬的最大值有多大,矩陣盡量開大一點(diǎn)可以避免越界),然后給出中間某個(gè)點(diǎn)的坐標(biāo),讓它成為整個(gè)圖形的坐下點(diǎn)坐標(biāo),然后遞歸得“畫出”三個(gè)子圖形(當(dāng)然還要注意一下遞歸出口O(∩_∩)O~),即可;當(dāng)然在不知道這個(gè)題目n的最大值時(shí),我們可以每次畫圖后刷新一邊矩陣,不過為了優(yōu)化速度,我只將n=10的圖形畫出,然后再由點(diǎn)與點(diǎn)之間的關(guān)系,求出各個(gè)參數(shù)的大小即可;
            最后輸出,這個(gè)沒什么可說的了。。。

            說句題外話,我交題的時(shí)候出現(xiàn)Access denied現(xiàn)
            幸好過年的時(shí)候也遇到過同樣情況 用IP地址才可正常訪問 大家注意下:

            遇到Access denied的用戶請通過http://162.105.81.212訪問poj



            #include<iostream>
            #include
            <cmath>
            #include 
            <cstdlib>
            using namespace std;
            #define MAX 100000000
            #define MIN -100000000

            char mymap[5000][5000];

            int leftdot;
            int rightdot;
            int topdot;
            int bottomdot;

            void figure(int x,int y,int deep)
            {

                
            if(deep==1)
                
            {

                    mymap[x][y]
            ='/';
                    mymap[x][y
            +1]='_';
                    mymap[x][y
            +2]='_';
                    mymap[x][y
            +3]='\\';
                    mymap[x
            -1][y+1]='/';
                    mymap[x
            -1][y+2]='\\';
                }

                
            else
                
            {
                    
            int dis=(int)pow((double)2,deep);
                    figure(x,y,deep
            -1);
                    figure(x,y
            +dis,deep-1);
                    figure(x
            -dis/2,y+dis/2,deep-1);
                }

            }



            int main ()
            {

                
            int n;
                
            int i,j;
                leftdot
            =MAX;
                rightdot
            =MIN;
                topdot
            =MAX;
                bottomdot
            =MIN;
                memset(mymap,
            ' ',sizeof(mymap));
                figure(
            2500,2500,10);
                
                
            while(scanf("%d",&n))
                
            {

                    
            if(n==0)
                        
            break;

                    topdot
            =2500-(int)pow((double)2,10)+1;
                    bottomdot
            =topdot+(int)pow((double)2,n)-1;
                    leftdot
            =2500+(int)pow((double)2,10)-(int)pow((double)2,n);
                    rightdot
            =leftdot+(int)pow((double)2,n+1)-1;
                    
            for(i=topdot;i<=bottomdot;i++)
                    
            {

                        
            for(j=leftdot;j<=rightdot;j++)
                        
            {

                            printf(
            "%c",mymap[i][j]);
                        }

                        printf(
            "\n");
                    }

                    printf(
            "\n");
                    
                }

                
            return 0;
                system(
            "pause");
            }


            posted @ 2009-03-27 22:08 abilitytao 閱讀(2618) | 評論 (0)編輯 收藏

            注意一個(gè)細(xì)節(jié)

            #include<iostream>
            using namespace std;


            struct node {
                
            int a;
                
            char b;
            }
            ;

            int main ()
            {
                cout
            <<sizeof(node)<<endl;
                system(
            "pause");
                
            return 0;

            }

            這段代碼運(yùn)行后 您認(rèn)為應(yīng)該輸出幾呢?
            上課的時(shí)候老師突然提出了這樣一個(gè)問題,當(dāng)時(shí)我想都沒想 直接回答了 5。
            呵呵 答案當(dāng)然是錯(cuò)的 現(xiàn)在來運(yùn)行一下這個(gè)程序 發(fā)現(xiàn)這個(gè)程序的結(jié)果是8;

             
            PS:感謝樓下兩位朋友的提問 讓問題變得更有意思了 內(nèi)部原理究竟是怎樣的呢?希望知道的朋友能夠予以解答
            我在這里僅給出一些測試現(xiàn)象 
             struct node
            {
            };
            輸出為1

            struct node
            {
            char a;
            };
            輸出為1

            struct node
            {
            int a;
            double b;
            };
            輸出為16

            struct node
            {
            char a;
            char b;
            char c;
            char d;
            char e;
            }
            輸出為5

            posted @ 2009-03-26 00:10 abilitytao 閱讀(323) | 評論 (7)編輯 收藏

            POJ 2503 -Babelfish 再談字典查詢問題

            記得第一次做這個(gè)題目的時(shí)候 用了很復(fù)雜的c語言算法 代碼冗長 現(xiàn)在用類來做 代碼非常簡潔
            這個(gè)方法只有一個(gè)缺點(diǎn) 就是耗時(shí)比C風(fēng)格的代碼大很多 所以建議參加ACM的同學(xué)還是盡量用C寫吧

            #include<iostream>
            #include
            <string>
            #include
            <map>
            #include
            <sstream>
            using namespace std;
            map
            <string,string>mymap;

            int main()
            {
                
            string line;
                
            string a;
                
            string b;
                
            while(getline(cin,line))
                
            {
                    
            if(line.length()==0)
                        
            break;
                    istringstream test(line);
                    test
            >>a>>b;
                    mymap[b]
            =a;
                }

                
            while(cin>>a)
                
            {
                    
            if(mymap[a].length()!=0)
                        cout
            <<mymap[a]<<endl;
                    
            else
                        cout
            <<"eh"<<endl;
                }

                
            return 0;
            }




            posted @ 2009-03-24 22:53 abilitytao 閱讀(529) | 評論 (0)編輯 收藏

            C++ 中庫函數(shù)bsearch的簡單研究(含示例)

            /*bsearch函數(shù)聲明如下:

            void *bsearch(const void *key, const void *base, size_t *nelem, 
                          size_t width, int(*fcmp)(const void *, const *)); 

            參數(shù)的意思和qsort的差不多,區(qū)別在于:
            1. qsort用來排序,bsearch用二分法來查找元素
            2. bsearch中的base必須是升序排列的數(shù)組!!!
            3. 如果數(shù)組里有重復(fù)的答案,則bsearch會(huì)返回其中一個(gè)的地址 (具體返回哪一個(gè)不確定)
            4. bsearch有五個(gè)自變量,第一個(gè)是要找的東西,剩下的跟qsort一模一樣
            5. bsearch如果沒找到所求則回傳NULL ,否則回傳該元素被找到的地址(void *) 
            */




            #include
            <iostream>
            #include
            <cstdlib>
            using namespace std;


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



            int main()

            {
                
            int a[100];
                
            int i;
                
            for(i=0;i<100;i++)
                    a[i]
            =i+1;
                i
            =50;
                
            int *result;
                result
            =(int*)bsearch((void*)&i,(void*)a,100,sizeof(a[0]),compare);
                cout
            <<i<<' '<<*result<<endl;
                system(
            "pause");
                
            return 0;
            }



            值得特別注意的是:函數(shù)的第一個(gè)元素是一個(gè)地址變量,而不是一個(gè)int型或者是float型的變量。

            posted @ 2009-03-24 11:27 abilitytao 閱讀(897) | 評論 (1)編輯 收藏

            C++標(biāo)準(zhǔn)庫簡介(轉(zhuǎn))

            C++標(biāo)準(zhǔn)庫的所有頭文件都沒有擴(kuò)展名。C++標(biāo)準(zhǔn)庫的內(nèi)容總共在50個(gè)標(biāo)準(zhǔn)頭文件中定義,其中18個(gè)提供了C庫的功能。 <cname>形式的標(biāo)準(zhǔn)頭文件【 <complex>例外】其內(nèi)容與ISO標(biāo)準(zhǔn)C包含的name.h頭文件相同,但容納了C++擴(kuò)展的功能。在 <cname>形式標(biāo)準(zhǔn)的頭文件中,與宏相關(guān)的名稱在全局作用域中定義,其他名稱在std命名空間中聲明。在C++中還可以使用name.h形式的標(biāo)準(zhǔn)C庫頭文件名。

            C++標(biāo)準(zhǔn)庫的內(nèi)容分為10類:

            C1.語言支持 C2.輸入/輸出 C3.診斷 C4.一般工具 C5.字符串

            C6.容器 C7.迭代器支持 C8.算法 C9.數(shù)值操作 C10.本地化


            C1 標(biāo)準(zhǔn)庫中與語言支持功能相關(guān)的頭文件 頭文件  描述 
            <cstddef> 定義宏NULL和offsetof,以及其他標(biāo)準(zhǔn)類型size_t和ptrdiff_t。與對應(yīng)的標(biāo)準(zhǔn)C頭文件的區(qū)別是,NULL是C++空指針常量的補(bǔ)充定義,宏offsetof接受結(jié)構(gòu)或者聯(lián)合類型參數(shù),只要他們沒有成員指針類型的非靜態(tài)成員即可。
            <limits> 提供與基本數(shù)據(jù)類型相關(guān)的定義。例如,對于每個(gè)數(shù)值數(shù)據(jù)類型,它定義了可以表示出來的最大值和最小值以及二進(jìn)制數(shù)字的位數(shù)。
            <climits> 提供與基本整數(shù)數(shù)據(jù)類型相關(guān)的C樣式定義。這些信息的C++樣式定義在 <limits>中
            <cfloat> 提供與基本浮點(diǎn)型數(shù)據(jù)類型相關(guān)的C樣式定義。這些信息的C++樣式定義在 <limits>中
            <cstdlib> 提供支持程序啟動(dòng)和終止的宏和函數(shù)。這個(gè)頭文件還聲明了許多其他雜項(xiàng)函數(shù),例如搜索和排序函數(shù),從字符串轉(zhuǎn)換為數(shù)值等函數(shù)。它與對應(yīng)的標(biāo)準(zhǔn)C頭文件stdlib.h不同,定義了abort(void)。abort()函數(shù)還有額外的功能,它不為靜態(tài)或自動(dòng)對象調(diào)用析構(gòu)函數(shù),也不調(diào)用傳給atexit()函數(shù)的函數(shù)。它還定義了exit()函數(shù)的額外功能,可以釋放靜態(tài)對象,以注冊的逆序調(diào)用用atexit()注冊的函數(shù)。清除并關(guān)閉所有打開的C流,把控制權(quán)返回給主機(jī)環(huán)境。
            <new> 支持動(dòng)態(tài)內(nèi)存分配
            <typeinfo> 支持變量在運(yùn)行期間的類型標(biāo)識(shí)
            <exception> 支持異常處理,這是處理程序中可能發(fā)生的錯(cuò)誤的一種方式
            <cstdarg> 支持接受數(shù)量可變的參數(shù)的函數(shù)。即在調(diào)用函數(shù)時(shí),可以給函數(shù)傳送數(shù)量不等的數(shù)據(jù)項(xiàng)。它定義了宏va_arg、va_end、va_start以及va_list類型
            <csetjmp> 為C樣式的非本地跳躍提供函數(shù)。這些函數(shù)在C++中不常用
            <csignal> 為中斷處理提供C樣式支持

            C2 支持流輸入/輸出的頭文件 頭文件  描述 
            < iostream> 支持標(biāo)準(zhǔn)流cin、cout、cerr和clog的輸入和輸出,它還支持多字節(jié)字符標(biāo)準(zhǔn)流wcin、wcout、wcerr和wclog。
            <iomanip> 提供操縱程序,允許改變流的狀態(tài),從而改變輸出的格式。
            <ios> 定義iostream的基類
            <istream> 為管理輸出流緩存區(qū)的輸入定義模板類
            <ostream> 為管理輸出流緩存區(qū)的輸出定義模板類
            <sstream> 支持字符串的流輸入輸出
            <fstream> 支持文件的流輸入輸出
            <iosfwd> 為輸入輸出對象提供向前的聲明
            <streambuf> 支持流輸入和輸出的緩存
            <cstdio> 為標(biāo)準(zhǔn)流提供C樣式的輸入和輸出
            <cwchar> 支持多字節(jié)字符的C樣式輸入輸出

            C3 與診斷功能相關(guān)的頭文件 頭文件 描述
            <stdexcept> 定義標(biāo)準(zhǔn)異常。異常是處理錯(cuò)誤的方式
            <cassert> 定義斷言宏,用于檢查運(yùn)行期間的情形
            <cerrno> 支持C樣式的錯(cuò)誤信息

            C4 定義工具函數(shù)的頭文件 頭文件 描述
            <utility> 定義重載的關(guān)系運(yùn)算符,簡化關(guān)系運(yùn)算符的寫入,它還定義了pair類型,該類型是一種模板類型,可以存儲(chǔ)一對值。這些功能在庫的其他地方使用
            <functional> 定義了許多函數(shù)對象類型和支持函數(shù)對象的功能,函數(shù)對象是支持operator()()函數(shù)調(diào)用運(yùn)算符的任意對象
            <memory> 給容器、管理內(nèi)存的函數(shù)和auto_ptr模板類定義標(biāo)準(zhǔn)內(nèi)存分配器
            <ctime> 支持系統(tǒng)時(shí)鐘函數(shù)

            C5 支持字符串處理的頭文件 頭文件 描述
            <string> 為字符串類型提供支持和定義,包括單字節(jié)字符串(由char組成)的string和多字節(jié)字符串(由wchar_t組成)
            <cctype> 單字節(jié)字符類別
            <cwctype> 多字節(jié)字符類別
            <cstring> 為處理非空字節(jié)序列和內(nèi)存塊提供函數(shù)。這不同于對應(yīng)的標(biāo)準(zhǔn)C庫頭文件,幾個(gè)C樣式字符串的一般C庫函數(shù)被返回值為const和非const的函數(shù)對替代了
            <cwchar> 為處理、執(zhí)行I/O和轉(zhuǎn)換多字節(jié)字符序列提供函數(shù),這不同于對應(yīng)的標(biāo)準(zhǔn)C庫頭文件,幾個(gè)多字節(jié)C樣式字符串操作的一般C庫函數(shù)被返回值為const和非const的函數(shù)對替代了。
            <cstdlib> 為把單字節(jié)字符串轉(zhuǎn)換為數(shù)值、在多字節(jié)字符和多字節(jié)字符串之間轉(zhuǎn)換提供函數(shù)

            C6 定義容器類的模板的頭文件 頭文件 描述
            <vector> 定義vector序列模板,這是一個(gè)大小可以重新設(shè)置的數(shù)組類型,比普通數(shù)組更安全、更靈活
            <list> 定義list序列模板,這是一個(gè)序列的鏈表,常常在任意位置插入和刪除元素
            <deque> 定義deque序列模板,支持在開始和結(jié)尾的高效插入和刪除操作
            <queue> 為隊(duì)列(先進(jìn)先出)數(shù)據(jù)結(jié)構(gòu)定義序列適配器queue和priority_queue
            <stack> 為堆棧(后進(jìn)先出)數(shù)據(jù)結(jié)構(gòu)定義序列適配器stack
            <map> map是一個(gè)關(guān)聯(lián)容器類型,允許根據(jù)鍵值是唯一的,且按照升序存儲(chǔ)。multimap類似于map,但鍵不是唯一的。
            <set> set是一個(gè)關(guān)聯(lián)容器類型,用于以升序方式存儲(chǔ)唯一值。multiset類似于set,但是值不必是唯一的。
            <bitset> 為固定長度的位序列定義bitset模板,它可以看作固定長度的緊湊型bool數(shù)組

            C7 支持迭代器的頭文件 頭文件 描述
            <iterator> 給迭代器提供定義和支持

            C8 有關(guān)算法的頭文件 頭文件 描述
            <algorithm> 提供一組基于算法的函數(shù),包括置換、排序、合并和搜索
            <cstdlib> 聲明C標(biāo)準(zhǔn)庫函數(shù)bsearch()和qsort(),進(jìn)行搜索和排序
            <ciso646> 允許在代碼中使用and代替&&

            C9 有關(guān)數(shù)值操作的頭文件 頭文件 描述
            <complex> 支持復(fù)雜數(shù)值的定義和操作
            <valarray> 支持?jǐn)?shù)值矢量的操作
            <numeric> 在數(shù)值序列上定義一組一般數(shù)學(xué)操作,例如accumulate和inner_product
            <cmath> 這是C數(shù)學(xué)庫,其中還附加了重載函數(shù),以支持C++約定
            <cstdlib> 提供的函數(shù)可以提取整數(shù)的絕對值,對整數(shù)進(jìn)行取余數(shù)操作

            C10 有關(guān)本地化的頭文件 頭文件 描述
            <locale> 提供的本地化包括字符類別、排序序列以及貨幣和日期表示。
            <clocale> 對本地化提供C樣式支持

             

            posted @ 2009-03-24 10:50 abilitytao 閱讀(11686) | 評論 (6)編輯 收藏

            istringstream類研究

            C++程序把輸入和輸出看作字符流,輸入時(shí),程序從輸入流中提取字節(jié),輸出時(shí),程序把字節(jié)插入到輸出流中。對于輸入輸出流既可以來自標(biāo)準(zhǔn)輸入輸出設(shè)備,也可以來自文件,甚至可以來自String對象,三者分別屬于iostream family、fstream family、sstream family。
            對于iostream類,就是我們通常所說的標(biāo)準(zhǔn)流,它把程序跟標(biāo)準(zhǔn)I/O連接在一起,輸入來自鍵盤,輸出送往監(jiān)視器。
            對于fstream類,它把程序跟文件關(guān)聯(lián)起來,輸入來自文件,輸出到文件。
            對于sstream類,它是提供程序和string對象之間的I/O,可通過ostringstream sout和istringstream sin來聲明兩個(gè)對象,分別對應(yīng)輸出流和輸入流,這給編程帶來極大的方便,例如可以從文本文件中讀取一批數(shù)字字符到string對象中,再把string對象作為程序的輸入流,既可把從文件中讀取來的數(shù)字字符單個(gè)進(jìn)行讀取,從而進(jìn)行處理。

            以上內(nèi)容為網(wǎng)上轉(zhuǎn)載,呵呵,原來iostream,fstream還有sstream呈三權(quán)分立之勢。

            #include<iostream>
            #include
            <fstream>
            #include
            <sstream>

            using namespace std;


            int main ()
            {
                
            char str[1000]="12 34.53 【O(∩_∩)O~(*^__^*)】 1234 12.12345678901234567890 #@$#@$#@$&*@#&#(!@#$";    
                istringstream test(str);
                
            //test="12 34.53 345342 34.123456789 【O(∩_∩)O~(*^__^*)】"
                int a;
                
            double b;
                
            char c[100];
                
            while(1)
                
            {
                    test
            >>a;
                    test
            >>b;
                    test
            >>c;
                }

            return 0;
            }



            以上程序在vc6.0上運(yùn)行正常;
            值得一提的是,經(jīng)過我的測試,我發(fā)現(xiàn)雖然sstream是純c++的東西,但是它也可以用char型數(shù)組進(jìn)行初始化;
            而且輸入的數(shù)據(jù)默認(rèn)情況下以空格為分隔符;
            輸入浮點(diǎn)類型的時(shí)候,最多只能取到小數(shù)點(diǎn)后15位,第15位會(huì)進(jìn)行四舍五入;
            如果你的輸入格式和數(shù)據(jù)流格式不匹配,那么將導(dǎo)致程序完全運(yùn)行錯(cuò)誤,不過我很奇怪c++內(nèi)部為什么不會(huì)報(bào)錯(cuò)?
            只有一種情況例外
            對于一個(gè)浮點(diǎn)數(shù) 比如說123,456
            如果先以整數(shù)輸入,那么得到123
            再以浮點(diǎn)數(shù)輸入,得到0.456;

            小結(jié):感覺istringstream和sscanf是同類型的函數(shù),只不過一個(gè)屬于傳統(tǒng)的c語言而另一個(gè)屬于高級的c++;
            用它可以方便的分離字符串,并且可以在字符串長度未知的情況下進(jìn)行操作,這是sscanf所無可比擬的。

            最后,要特別鳴謝的是張宏課上面的那位同學(xué),多謝你的指點(diǎn) :-)


            posted @ 2009-03-23 22:36 abilitytao 閱讀(4045) | 評論 (10)編輯 收藏

            Eight Queen Problem-淺究八皇后問題

                 摘要: 對Rss客戶端訂閱的朋友表示歉意。  閱讀全文

            posted @ 2009-03-23 21:58 abilitytao 閱讀(1776) | 評論 (1)編輯 收藏

            僅列出標(biāo)題
            共42頁: First 33 34 35 36 37 38 39 40 41 Last 
            亚洲精品国产成人99久久| 香港aa三级久久三级老师2021国产三级精品三级在 | 亚洲中文字幕无码久久2017| 久久99热这里只有精品国产| 久久综合给久久狠狠97色| 亚洲综合精品香蕉久久网97| 精品久久人人妻人人做精品| 四虎国产精品成人免费久久| 日产精品99久久久久久| 久久97久久97精品免视看| 日韩人妻无码一区二区三区久久99| 久久精品国产亚洲av高清漫画| 91精品久久久久久无码| 久久国产AVJUST麻豆| 久久精品国内一区二区三区| 欧美国产精品久久高清| 69国产成人综合久久精品| 综合久久精品色| 97久久精品人人做人人爽| 日韩精品久久久久久久电影蜜臀| 久久久久黑人强伦姧人妻| 久久综合精品国产二区无码| 伊人色综合久久天天人守人婷| 国内精品久久久久影院免费| 亚洲AV无码久久| 久久久久亚洲精品日久生情 | 亚洲级αV无码毛片久久精品| 久久久久久国产精品美女| 麻豆精品久久精品色综合| 99久久精品费精品国产一区二区| 欧美午夜精品久久久久免费视 | 久久精品国产只有精品2020| 精品综合久久久久久98| 亚洲精品成人网久久久久久| 久久久久国产一级毛片高清板| 国产精品欧美亚洲韩国日本久久 | 亚洲国产精品久久久久婷婷软件 | 久久人人爽人人爽人人av东京热| 三级三级久久三级久久| 久久国产欧美日韩精品| 精品久久久久久国产|