字符長串中短串逆序輸出
摘要: 閱讀全文posted @ 2010-09-28 10:14 sduzgz 閱讀(337) | 評論 (0) | 編輯 收藏
2010年9月28日 #
2010年9月25日 #
2010年9月16日 #
2010年9月1日 #
|
問題:用Visual studio 2008編輯C++程序,按Ctrl+F5,出現下列錯誤: fatal error C1083: 無法打開預編譯頭文件:“Debug/UGFace.pch”: No such file or directory 解決辦法:打開stdafx.cpp源文件,然后編譯一次,待編譯通過后再對程序執行Ctrl+F7的操作。
剛研究C++語言,那知道,照著書上的例子編寫第一個程序就出錯了: fatal error C1010: unexpected end of file while looking for precompiled header directive 根據提示,我改變了預處理命令的應用,甚至我注釋了#include stdafx.h這個頭文件命令,結果當然是大錯特錯,錯上加錯。編寫第一個程序就搞成這個樣子,實在是有點郁悶……于是我搜索了這一錯誤,看到如下一篇文章: 1、用VC.NET編輯程序,按Ctrl+F7,出現下列錯誤: fatal error C1083: 無法打開預編譯頭文件:“Debug/UGFace.pch”: No such file or directory 解決方法:修改:項目->屬性->C/C++ ->預編譯頭->不使用預編譯頭 即可。 2、先打開一個以前做了一下的工程,編譯通過,能運行。我就稍微修改了一下代碼(只是修 改一個參數使寫入INI文件的整數由0變為10),這時編譯通不過了,提示頭文件“stdafx.h”編譯錯誤(具體錯誤提示忘記了),錯誤位置指向應用 程序類的源文件的語句“#include "stdafx.h"”。不包含這個文件是不行的,左看右看沒找出個原因來,甚至把代碼改回原來的樣子,還是不行。到網上一查,發現這么一段話:
來到我的VC源代碼目錄,我注意到每個Project每個Project下面的DEBUG文件夾都特別大,而且一個擴展名為 .pch的文件占去了絕大部分,我刪掉之好像對程序編譯運行沒有什么影響.于是抱著對.pch文件的好奇,我在網上搜到了我疑惑之處的解答.這就是 VC++6.0給我們帶來的:預編譯頭文件.預編譯頭文件(一般擴展名為.PCH),是把一個工程中較穩定的代碼預先編譯好放在一個文件(.PCH)里. 這些預先編譯好的代碼可以是任何的C/C++代碼--甚至可以是inline函數,只是它們在整個工程中是較為穩定的,即在工程開發過程中不會經常被修改 的代碼. 為什么需要預編譯頭文件? 一言以蔽之:提高編譯速度.一般地,編譯器以文件為單位編譯,如果修改了一工程中的一個文件則所有文件都要重新編譯,包括頭文件里的所有東西 (eg.Macro宏,Preprocessor預處理),而VC程序中,這些頭文件中所包括的東西往往是非常大的,編譯之將占很長的時間.但它們又不常 被修改,是較穩定的,為單獨的一個小文件而重新編譯整個工程的所有文件導致編譯效率下降,因此引入了.PCH文件. 如何使用預編譯頭文件以提高編譯速度? 要使用預編譯頭文件,必須指定一個頭文件(.H),它包含我們不會經常修改的代碼和其他的頭文件,然后用這個頭文件(.H)來生成一個預編譯頭文件 (.PCH)VC默認的頭文件就是StdAfx.h,因為頭文件是不能編譯的,所以我們還需要一個.CPP文件來作橋梁,VC默認的文件為 StdAfx.cpp,這個文件里只有一句代碼就是:#include "StdAfx.h".接下來要用它生成.PCH文件,涉及到幾個重要的預編譯指令:/Yu,/Yc,/Yx,/Fp.簡單地說,/Yc是用來生 成.PCH文件的編譯開關.在Project->setting->C/C++的Category里的Precompiled Header,然后在左邊的樹形視圖中選擇用來編譯生成.PCH文件的.CPP文件(默認即StdAfx.cpp)你就可以看到/Yc這個開關,它表示這 個文件編譯了以后是否生成.PCH文件(可能/Yc的c表示create)./Fp指令指定生成的.PCH文件的名字及路徑(可能/Fp的p代表 path)./Yu的u即use使用,工程中只要包括了.H文件的文件都會有這個/Yu指令.如果選擇自動Automatic...的話則原來為/Yc的 地方就換成了/Yx指令.如果選擇自動,則每次編譯時編譯器會看以前有沒有生成過.PCH文件,有則不現生成否則就再次編譯產生.PCH文件. 注意:
照這么說,我這種情況只要重新將“StdAfx.cpp”編譯一下就可以了,一試,馬上能編譯運行了。心里不知道有多高興,因為以前碰到過幾次這樣的問題都不知道怎么解決,只好重新創建一個相同的工程。 |
posted @ 2010-09-01 10:12 sduzgz 閱讀(971) | 評論 (1) | 編輯 收藏
#include <iostream>
#include <cmath>
const int MAX = 0xFF;
using namespace std;
int n;
int G[MAX][MAX];
int main(void)

{
int i,j,n,cnt;
while(cin>>n)
{
cnt = 0;
memset(G,0,sizeof(G));
G[0][0] = 1;
G[n-1][n-1] = n*n;
int tx,ty;
cnt = 1;
for(i=1;i<n;i++)
{
if(i%2 == 1) //關于對角線對稱的點一起得到,上半部分的從左上頂點值往后推,下半部分從右下頂點往前推
{
tx = i;ty = 0;
G[i][0] = G[i-1][0] + 1;
while(tx > 0)
{
G[--tx][++ty] = G[tx+1][ty-1] + 1;
}
tx = n-i-1;ty = n-1;
G[tx][ty] = G[tx+1][ty] - 1;
while(tx < n-1)
{
G[++tx][--ty] = G[tx-1][ty+1] - 1;
}
}
else
{
tx = 0;ty = i;
G[0][i] = G[0][i-1] + 1;
while(ty > 0)
{
G[++tx][--ty] = G[tx-1][ty+1] + 1;
}
tx = n-1;ty = n-i-1;
G[tx][ty] = G[tx][ty+1] - 1;
while(ty < n-1)
{
G[--tx][++ty] = G[tx+1][ty-1] - 1;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<G[i][j]<<" ";
}
cout<<endl;
}
}
return 0;
}posted @ 2010-09-01 09:54 sduzgz 閱讀(329) | 評論 (0) | 編輯 收藏
2010年8月30日 #
#include<iostream>
#include<stdlib.h>
#include<time.h>
//#define MAXSIZE 1001
using namespace std;
int main()

{
int Array[101];//該數組里存放1到1000的數
//int Store[1001];//這個數組用來裝隨機數的
int sum=0,arraysum=0;
int temp,starti;
int i;
for (int i=0;i<=99;i++)// 求1-1000總和
{
Array[i]=i+1;
sum=sum+Array[i];
}
cout<<"sum="<<sum<<endl;
//產生1000個隨機數
srand((unsigned)time(NULL));
Array[100]=rand()%100;
/**//*下面要隨機產生位置index然后將Array[index]上的元素與最后一個位置上的元素交換*/
//cout<<Array[100]<<endl;
for (i=100;i>0;i--)

{
srand((unsigned)time(0));//隨機數種子在循環外還是在循環內呢?
int index=rand()%100;
cout<<"index="<<index<<endl;
int temp1=Array[index];
Array[index]=Array[i];
Array[i]=temp1;
}
for(i=0;i<=100;i++)

{
cout<<Array[i]<<endl;
arraysum+=Array[i];
}
cout<<"arraysum="<<arraysum<<endl;
int repeat;
repeat=arraysum-sum;
cout<<"repeat number is:"<<repeat<<endl;
/**//*下面要對數組排序并挑出重復數*/
int k=0;
// 將repeat從前999個數中剔除的方法1 :
while(k<99)

{
if(Array[k]==repeat&&Array[k+1]==repeat)
{
Array[k]=Array[k+2];
Array[k+2]=repeat;
}
else if(Array[k]==repeat)
{
Array[k]=Array[k+1];
Array[k+1]=repeat;
}
k++;
}

/**//*將repeat從前999個數中剔除的方法2*/
/**//*while(k<99)
{
if(Array[k]==repeat&&Array[99]!=repeat)
{
int temp2=Array[k];
Array[k]=Array[99];
Array[99]=temp2;
}
else if(Array[k]==repeat&&Array[100]!=repeat)
{
int temp2=Array[k];
Array[k]=Array[100];
Array[100]=temp2;
}
else
{
k++;
continue;
}
k++;
}*/
/**//* for(int i=0;i<=10;i++)
{
cout<<Array[i]<<endl;
}*/
for(i=0;i<=98;i++)

{
for(int j=1;j<=98-i;j++)
{
if(Array[j-1]>Array[j])
{
temp=Array[j-1];
Array[j-1]=Array[j];
Array[j]=temp;
}
}
}
//Array[99]=repeat;
//Array[100]=repeat;
for( i=0;i<=100;i++)
//printf("%d\n",Store[i]);
cout<<Array[i]<<endl;
cout<<"sum="<<i-1<<endl;
system("pause");
return 0;
}
posted @ 2010-08-30 09:35 sduzgz 閱讀(341) | 評論 (0) | 編輯 收藏