❶ 解讀批處理語句
del
/F是強制刪除只讀文件
/Q是安靜模式,刪除全局通配符時不要求確認。
cls是清屏
cd是進入
cd..是進入上級目錄
ren是重命名文件
arc是DOS下的解壓縮工具,至於參數,樓主可以再網路一下。
1985年,一個名為SEA公司開發的名為ARC的壓縮軟體獲得了廣泛關注。這是MS-DOS環境下第一個壓縮應用軟體。
ARC在MS-DOS時代,曾經是占據了統治性的地位。從技術角度來說ARC相當優秀,但它使用了專利的LZW演算法,因此要使用這款軟體必須付費,是一款標準的商業軟體。因此,許多電腦用戶根本買不起ARC軟體。如果不是盜版商將其收錄,恐怕我們很少有人能使用上這款軟體。
由於在MS-DOS的時代,軟體出售的方式不僅包括了一份EXE可執行文件,還包括它的C語言源代碼。一個名為菲利普?卡茲的電腦玩家將ARC的C語言源代碼進行復制並用匯編語言重寫,製作出了一款名為PKARC的壓縮軟體。這個程序與ARC完全兼容,而且由於使用匯編使得其速度比ARC更快。軟體的使用方式也非常簡單,它以非強迫性注冊的共享軟體形式向他人發放,即使是不注冊,一樣可以毫無限制地使用下去。真是因此,ARC的市場被PKARC侵吞。ARC的開發公司SEA以侵犯ARC壓縮格式編碼演算法的罪名告上了法庭,使得PKARC不得不被停止發放。
而PKARC的作者菲利普?卡茲決定,使用沒有任何版權專利的LZ77演算法,通過將LZ77和Huffman編碼完美結合,創造出了日後大名鼎鼎的DEFLATE演算法了。而採用了該演算法,經由菲利普?卡茲本人頃力開發的新壓縮軟體被命名位PKZIP,而其文件格式擴展名叫作「.zip」。PKZIP可將多個文件壓縮到一個文件中,無論壓縮比還是壓縮速度都全面超過了商ARC。PKZIP被菲利普?卡茲免費發放,使得更多的人知道了ZIP格式的壓縮文件。
除了免費發放PKZIP,菲利普?卡茲更是宣布開放ZIP格式,使得任何人都可以自由使用ZIP編碼演算法而不需要繳納專利費用。這一舉動不僅僅方便了全體電腦用戶,更是最終改變了壓縮軟體領域的發展,樹立了MS-DOS時代的壓縮標准。這個時代同影響力的壓縮軟體還有LHA(壓縮格式為LZH、LHA)和ARJ(壓縮格式為ARJ)。
卡茲一直繼續著對PKZIP的開發和維護工作,而進入了Windows時代,使用卡茲創造的壓縮演算法的軟體Winzip的出現,更是令ZIP格式成為Internet的傳輸標准,ZIP壓縮格式也成為壓縮文檔的事實標准。
進入了Windows時代,ZIP最初保持了無人可及的高度和地位,成為了裝機必備軟體。但是隨著WinRAR、WinACE等後起之秀的出現,WinZIP逐漸走向沒落。當然,WinZIP畢竟是老薑,不會就此罷休,在沉寂多年之後又開始繼續更新開發新版本。因此,壓縮軟體市場上出現了群雄逐鹿的戰國時代。下面就讓我們分別對當前的幾款主流壓縮軟體進行簡單的介紹。
❷ 如何用C語言讀取tif圖片每個點的RGB值並進行判斷
這個用matlab比較容易,c的沒試過。
❸ C++程序設計大作業要求
C++程序設計從零開始之語句
http://seasonfive.cn/read.php?tid-234.html
h用C++實現簡單的文件I/O操作
G http://seasonfive.cn/read.php?tid-236.html
lzw壓縮演算法的c語言實現
g http://seasonfive.cn/read.php?tid-237.html
%C/C++中的日期和時間
V http://seasonfive.cn/read.php?tid-238.html
)論C/C++函數間動態內存的傳遞
# http://seasonfive.cn/read.php?tid-239.html
MC++中的虛函數(virtual function)
Y http://seasonfive.cn/read.php?tid-240.html
鏈表的C語言實現之單鏈表的查找運算
[ http://seasonfive.cn/read.php?tid-241.html
L鏈表的C語言實現之單鏈表的實現
K http://seasonfive.cn/read.php?tid-242.html
"C++程序設計從零開始之指針
h http://seasonfive.cn/read.php?tid-243.html
NC++箴言:將強制轉型減到最少
j http://seasonfive.cn/read.php?tid-244.html
❹ 那C語言學了到底有 什麼用啊 ,一般編的 程序有 什麼用啊
主要是以後若在軟體領域工作的話,就對編軟體用相當大的用處。
學c語言到底有什麼用?為您詮釋!
我學了C,C++,JAVA.還有很多的腳本語言,最後徹底留下的只有c語言,c++的許多機制忘了,JAVA就沒有記住幾種機制。
面對編程高手(會n種),而且很牛b的那種,我依然以我會c語言自豪,我也因為我會c語言而自信。面對什麼什麼技術「趨勢」的時代,我只精通c語言,發現已經足夠了,而且是完全足夠了。當我需要學習PHP的時候,我1個星期可以說基本掌握了;當我要學B shell的時候,1個星期也夠了;當我要學習JSP的時候....什麼?什麼是JSP?別說我學過這些垃圾。
我愛用最簡單的語言機制構建出你復雜邏輯,你嚴謹的思維。當你發現這么簡單的C語言男夠構架出UNIX操作系統和大部分UNIX程序的時候,你就發現你不能輕視C。
有的人說機制少,不安全,不健全......那麼安全的語言機制就失去了靈活,失去了輕便。
有的人說功能少,C庫少,連界面都不能寫.......那麼當malloc都由自己寫的時候,程序才牢牢掌握在自己手中。真正的程序員是沒有界面的,程序員在text mode下能快捷,方便地做你想做的一切事情。
下面介紹一下我學習的方法,覺得特別有用。。
如果是連高數,計算機原理之類的書或是英語沒有入門的人,那就不應該學習編程,不可能牛起來。
如果是C語言剛上手,最好選一本國內語言語法,語句講得細致的書。
如果上手了,或者學習過其他的語言,那麼就一定要看一本最經典的C語言書,比如《C語言程序設計》,這本書我後來又看一遍才知道有多好,眼界十分開闊。
認為都學的差不多了,最最最好的聯系方法(切身體會!!!),就是自己寫程序,寫什麼呢??兩個中你挑一個:md5加密演算法的實現 或者是 lzss或lzw壓縮演算法的實現。這兩個程序接近底層又不算十分大,又有很多的數據結構和演算法。資料就要自己去找了,網上有講演算法的,你來具體實現,能自己設計演算法並能夠在unix機器上實現那更好。
搞過這個你就能體會到自己終於入門了,因為你到時候就會發現又很多的內容還等著你去學.....並且你可以拿著你的程序炫耀了,事實證明能把這個程序徹底些出來並且些的很好的(bug少),已經有功底了,你可以把程序發布到sourceforge.net等開源社區上,招人開啟你自己的工程。
當然有了功底,剩下的路你自己就應該知道怎麼走了,有一條向linux工程師的方向,就是學習linux,如果你c語言足夠好,可以直接學習內核,試著編寫,編譯內核;也可以弄弄上層的東西,shell,awk,iptable之類的.....當然經典的書《unix高級編程》是講unix下的gcc程序開發的
還有網路工程師的路,那就要學協議,有巨他媽經典的3卷的書:《TCP/IP詳解》一,二,三。只看一也可以。然後看一看《unix網路編程》,那就足夠了.....
如果想向軟體工程師發展,那更不成問題。你再學什麼語言,什麼JAVA,C++,JSP....那是哇哇的簡單,但是注意,一定要看最經典的書,你才能成為高手!!
還有一條我最嚮往的路,就是成為一個hacker,就是黑客,做這個你必須有一定的經濟收入和空餘的時間才可以...。宗旨是為全世界的IT頁貢獻出力量。這個有一個好處,就是任憑你自己的興趣,喜歡游戲的可以開發游戲,想搞unix的可以開發內核什麼的。
這個最後一定要進入一個很好的自由社區,比如apache基金會或是GNU基金會,想在後一代的著名程序比如apache httpd,tomcat,kerneln.n上刻上自己的名字就可以向這方面發展。也可以在sourceforge.net上找找自己喜歡的工程,申請加入..如果搞的好還能有基金會的money外快又能滿足自己的興趣,可惜我現在沒錢,否則早幹了....
那個時候,你已經有找一份很體面的工作的實力了..干什麼都可以輕輕鬆鬆的..
不論走到哪,c語言還是根本,不論IT格局怎麼變,有C語言有如心中一塊石頭,它是不可能變的,就像tcp/ip,不管上層再有什麼技術,基本原理和介面20幾年就是沒有變過!
回顧幾年的IT學習生涯,就像是濃縮的過程,東西越學越少,最後好像只有c語言了....
❺ 誰能提供個lzw壓縮演算法的c語言完整實現
程序由五個模塊組成。(1) lzw.h 定義了一些基本的數據結構,常量,還有變數的初始化等。#ifndef __LZW_H__
#define __LZW_H__
//------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <memory.h>
//------------------------------------------------------------------------------
#define LZW_BASE 0x102// The code base
#define CODE_LEN 12 // Max code length
#define TABLE_LEN 4099 // It must be prime number and bigger than 2^CODE_LEN=4096.
// Such as 5051 is also ok.
#define BUFFERSIZE 1024
//------------------------------------------------------------------------------
typedef struct
{
HANDLE h_sour; // Source file handle.
HANDLE h_dest; // Destination file handle.
HANDLE h_suffix; // Suffix table handle.
HANDLE h_prefix; // Prefix table handle.
HANDLE h_code; // Code table handle.
LPWORD lp_prefix; // Prefix table head pointer.
LPBYTE lp_suffix; // Suffix table head pointer.
LPWORD lp_code; // Code table head pointer. WORD code;
WORD prefix;
BYTE suffix; BYTE cur_code_len; // Current code length.[ used in Dynamic-Code-Length mode ]}LZW_DATA,*PLZW_DATA;
typedef struct
{
WORD top;
WORD index; LPBYTE lp_buffer;
HANDLE h_buffer;
BYTE by_left;
DWORD dw_buffer; BOOL end_flag;}BUFFER_DATA,*PBUFFER_DATA;
typedef struct //Stack used in decode
{
WORD index;
HANDLE h_stack;
LPBYTE lp_stack;}STACK_DATA,*PSTACK_DATA;
//------------------------------------------------------------------------------
VOID stack_create( PSTACK_DATA stack )
{
stack->h_stack = GlobalAlloc( GHND , TABLE_LEN*sizeof(BYTE) );
stack->lp_stack = GlobalLock( stack->h_stack );
stack->index = 0;
}
//------------------------------------------------------------------------------
VOID stack_destory( PSTACK_DATA stack )
{
GlobalUnlock( stack->h_stack );
GlobalFree ( stack->h_stack );
}
//------------------------------------------------------------------------------
VOID buffer_create( PBUFFER_DATA buffer )
{
buffer->h_buffer = GlobalAlloc( GHND, BUFFERSIZE*sizeof(BYTE) );
buffer->lp_buffer = GlobalLock( buffer->h_buffer );
buffer->top = 0;
buffer->index = 0;
buffer->by_left = 0;
buffer->dw_buffer = 0;
buffer->end_flag = FALSE;
}
//------------------------------------------------------------------------------
VOID buffer_destory( PBUFFER_DATA buffer )
{
GlobalUnlock( buffer->h_buffer );
GlobalFree ( buffer->h_buffer );
}
//------------------------------------------------------------------------------
VOID re_init_lzw( PLZW_DATA lzw ) //When code table reached its top it should
{ //be reinitialized.
memset( lzw->lp_code, 0xFFFF, TABLE_LEN*sizeof(WORD) );
lzw->code = LZW_BASE;
lzw->cur_code_len = 9;
}
//------------------------------------------------------------------------------
VOID lzw_create(PLZW_DATA lzw, HANDLE h_sour, HANDLE h_dest)
{
WORD i;
lzw->h_code = GlobalAlloc( GHND, TABLE_LEN*sizeof(WORD) );
lzw->h_prefix = GlobalAlloc( GHND, TABLE_LEN*sizeof(WORD) );
lzw->h_suffix = GlobalAlloc( GHND, TABLE_LEN*sizeof(BYTE) );
lzw->lp_code = GlobalLock( lzw->h_code );
lzw->lp_prefix = GlobalLock( lzw->h_prefix );
lzw->lp_suffix = GlobalLock( lzw->h_suffix );
lzw->code = LZW_BASE;
lzw->cur_code_len = 9;
lzw->h_sour = h_sour;
lzw->h_dest = h_dest;
memset( lzw->lp_code, 0xFFFF, TABLE_LEN*sizeof(WORD) );}
//------------------------------------------------------------------------------
VOID lzw_destory(PLZW_DATA lzw)
{
GlobalUnlock( lzw->h_code );
GlobalUnlock( lzw->h_prefix );
GlobalUnlock( lzw->h_suffix );GlobalFree( lzw->h_code );
GlobalFree( lzw->h_prefix );
GlobalFree( lzw->h_suffix );
}
//------------------------------------------------------------------------------
#endif(2) fileio.h 定義了一些文件操作#ifndef __FILEIO_H__
#define __FILEIO_H__
//------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
//------------------------------------------------------------------------------
HANDLE file_handle(CHAR* file_name)
{
HANDLE h_file;
h_file = CreateFile(file_name,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
0,
NULL
);
return h_file;
}
//------------------------------------------------------------------------------
WORD load_buffer(HANDLE h_sour, PBUFFER_DATA buffer) // Load file to buffer
{
DWORD ret;
ReadFile(h_sour,buffer->lp_buffer,BUFFERSIZE,&ret,NULL);
buffer->index = 0;
buffer->top = (WORD)ret;
return (WORD)ret;
}
//------------------------------------------------------------------------------
WORD empty_buffer( PLZW_DATA lzw, PBUFFER_DATA buffer)// Output buffer to file
{
DWORD ret;
if(buffer->end_flag) // The flag mark the end of decode
{
if( buffer->by_left )
{
buffer->lp_buffer[ buffer->index++ ] = (BYTE)( buffer->dw_buffer >> 32-buffer->by_left )<<(8-buffer->by_left);
}
}
WriteFile(lzw->h_dest, buffer->lp_buffer,buffer->index,&ret,NULL);
buffer->index = 0;
buffer->top = ret;
return (WORD)ret;
}
//------------------------------------------------------------------------------
#endif
❻ 急求lzw演算法的英文文本壓縮C語言源代碼!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>//用來計算壓縮的時間
using namespace std;
//定義常數
const int MAX = 1000003;//最大code數,是一個素數,求模是速度比較快
const int ascii = 256; //ascii代碼的數量
const int ByteSize = 8; //8個位元組
struct Element//hash表中的元素
{
int key;
int code;
Element *next;
}*table[MAX];//hash表
int hashfunction(int key)//hash函數
{
return key%MAX;
}
void hashinit(void)//hash表初始化
{
memset(table,0,sizeof(table));
}
void hashinsert(Element element)//hash表的插入
{
int k = hashfunction(element.key);
if(table[k]!=NULL)
{
Element *e=table[k];
while(e->next!=NULL)
{
e=e->next;
}
e->next=new Element;
e=e->next;
e->key = element.key;
e->code = element.code;
e->next = NULL;
}
else
{
table[k]=new Element;
table[k]->key = element.key;
table[k]->code = element.code;
table[k]->next = NULL;
}
}
bool hashfind(int key,Element &element)//hash表的查找
{
int k = hashfunction(key);
if(table[k]!=NULL)
{
Element *e=table[k];
while(e!=NULL)
{
if(e->key == key)
{
element.key = e->key;
element.code = e->code;
return true;
}
e=e->next;
}
return false;
}
else
{
return false;
}
}
void compress(void)//壓縮程序
{
//打開一個流供寫入
FILE *fp;
fp = fopen("result.dat", "wb");
Element element;
int used;
char c;
int pcode, k;
for(int i=0;i<ascii;i++)
{
element.key = i;
element.code = i;
hashinsert(element);
}
used = ascii;
c = getchar();
pcode = c;
while((c = getchar()) != EOF)
{
k = (pcode << ByteSize) + c;
if(hashfind(k, element))
pcode = element.code;
else
{
//cout<<pcode<<' ';
fwrite(&pcode, sizeof(pcode), 1, fp);
element.code = used++;
element.key = (pcode << ByteSize) | c;
hashinsert(element);
pcode = c;
}
}
//cout<<pcode<<endl;
fwrite(&pcode, sizeof(pcode), 1, fp);
}
int main(void)
{
int t1,t2;
//欲壓縮的文本文件
//freopen("input.txt","r",stdin);
freopen("book5.txt","r",stdin);
t1=time(NULL);
hashinit();
compress();
t2=time(NULL);
cout<<"Compress complete! See result.dat."<<endl;
cout<<endl<<"Total use "<<t2-t1<<" seconds."<<endl;
❼ 跪求C語言進行哈夫曼編碼、算術編碼和LZW編碼,要求源程序要有注釋。
以下是哈夫曼編碼
#include<iostream>
#include<math.h>
#include<string>
#include<iomanip>
using namespace std;
int n;
int isin(string str,char a)
{
int temp=0;
for(int i=0;i<str.length();i++)
{
if(str[i]==a) temp=1;
}
return temp;
}
void bubble(double p[],string sign[])//排序
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(p[i]<p[j])
{
double temp=p[i];
p[i]=p[j];
p[j]=temp;
string m=sign[i];
sign[i]=sign[j];
sign[j]=m;
}
}
}
}
void huff(double tempp[],string tempstr[])
{
double p[20][20];
string sign[20][20];
sign[0][i]=tempstr[i]; //符號放在sign數組中
for(int i=0;i<n;i++)
{
p[0][i]=tempp[i]; //p數組放對應的概率(第1列中)
}
for(i=0;i<n-1;i++)
{
bubble(p[i],sign[i]); //第一次排序
for(int j=0;j<n-2-i;j++)
{
p[i+1][j]=p[i][j]; //前n-2-i個概率重新放在p數組中(是數組的第2列中)
sign[i+1][j]=sign[i][j];
}
p[i+1][j]=p[i][j]+p[i][j+1];//第一次兩個最小概率求和
sign[i+1][j]=sign[i][j]+sign[i][j+1];//符號跟隨
for(j=n-1-i;j<n;j++)
{
p[i+1][j]=0;
}
}
string final[20];
for(i=n-2;i>=0;i--)
{
for(int k=0;k<n;k++)
{
if(isin(sign[i][n-2-i],sign[0][k][0])) final[k]+="0";
if(isin(sign[i][n-1-i],sign[0][k][0])) final[k]+="1";
}
}
cout<<setw(9)<<"哈弗曼編碼如下:"<<endl;
for(i=0;i<n;i++)
{
cout<<setw(7)<<sign[0][i]<<setw(7)<<p[0][i]<<setw(10)<<final[i]<<
setw(7)<<final[i].length()<<endl;
}
}
void main()
{
char a[50];
cout<<"該字元串符號為:";
cin>>a;
string s=a;
n=s.length();
char b[20][2];
for(int i=0;i<n;i++)
{
b[i][0]=a[i];
b[i][1]='\0';
}
string str[20];
for(i=0;i<n;i++)
{
str[i]=b[i];
}
double tempp[20];
cout<<"字元概率依次為:";
for(i=0;i<n;i++)
{
cin>>tempp[i];
}
huff(tempp,str);
}
❽ 如何用C語言讀取1位BMP 將圖像信息轉換成1 0放入二維數組中
在VC++環境下BMP圖像文件與GIF圖像文件的轉換。首先分析了BMP與GIF2種圖像的具體格式,然後在VC++環境下建立自己的函數庫文件DIB.H和DIB.CPP,對即將使用的數據成員和函數成員進行初始化,從而實現BMP圖像的讀取、顯示和保存等相關操作。在理解LZW編碼演算法原理的基礎上,在VC++下實現該演算法。同時,通過前面建立的BMP圖像函數庫,調用相關函數,就可以找到相應的具體的圖像數據,進而通過LZW編碼將BMP圖像數據轉換成GIF圖像數據,實現圖像格式的轉換
❾ LZSS演算法名稱的由來
LZSS是一種由LZ77改進的基於字典壓縮的編碼,LZSS編碼的原理是搜索目前未壓縮的數據是否在前面出現過,如果出現過則利用前面出現的位置和長度代替現在的未壓縮數據。
LZ77演算法是由 Lempel-Ziv 在1977發明的。LZ77演算法有許多變種演算法,LZSS演算法是LZ77其中一種變形,雖然LZ77有多種變形演算法,但是這些基於LZ77變形的演算法背後的原理都是一樣的。
請原諒我復制了上面倆段
我只是想告訴你 加上我自己的認知和我在網上能搜索到的所有內容來告訴你
LZSS 後SS是一種演算法 不代表意義
不是人名 就象LZ77一樣
它是演變過來的 區別LZ77 以LZSS演算法的形式
後面SS 是代表這種演算法的規律和變化
所以就象加減乘除 它僅代表一種運算方式
看到LZSS你就想到了這 LZ77又是另一種
不知道我的淺薄解釋您滿意不?