CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

请教这个程序

楼主ringbellxxh()2004-11-02 21:49:49 在 C/C++ / 新手乐园 提问

//Encrypt.cpp  
  #include   <iostream>  
   
  #include   "Message.h"  
  #include   "Table.h"  
  using   namespace   std;  
   
  #define   MAXLENGTH   256  
   
  void   getMessage(char&   amessage,   char&   akey);  
   
  int   main(int   argc,   char*   argv[])  
  {  
  Message   myMessage;  
   
  if(argc   !=   2)  
  {  
  cout   <<   "usage:   "   <<   argv[0]   <<   ".exe   -d   or   -e"   <<   endl;  
  return   0;  
  }  
   
  if(   !strcmp(argv[1],   "-d"))  
  {  
  myMessage.getMessage();  
  myMessage.getKey();  
  myMessage.decryptMessage();  
  }  
   
   
   
  //Message.cpp  
  #include   <iostream>  
  #include   <string>  
  #include   <stdio.h>  
   
  #include   "Message.h"  
  #include   "table.h"  
   
  using   namespace   std;  
   
  //Default   constructor  
  Message::Message()  
  {}  
   
  //Constructor  
  Message::Message(const   char*   pStr,   const   char*   key)  
  {  
  int   i,   j;  
   
  pUnMessage   =   new   char[   strlen(pStr)   +   1   ];  
  strcpy(pUnMessage,   pStr);  
     
  pEnMessage   =   new   char[   strlen(pStr)   +   1   ];  
  strcpy(pEnMessage,   pStr);  
   
  pKey   =   new   char[   strlen(pStr)   +   1   ];  
  strcpy(pKey,   pStr);  
   
  for(i   =   0,   j   =   0;   i   <   strlen(pStr),   j   <   strlen(pStr);   i++,   j++)  
  {  
  if(key[j]   &&   pKey[i])  
  {  
  pKey[i]   =   key[j];  
  }  
  else   if(key[j]   ==   '\0')  
  {  
  j   =   -1;  
  i--;  
  }  
  else  
  break;  
  }  
  }  
   
  //Constructor   for   only   the   message,   not   the   key  
  Message::Message(const   char*   pStr)  
  {  
  pUnMessage   =   new   char[   strlen(pStr)   +   1   ];  
  strcpy(pUnMessage,   pStr);  
   
  pEnMessage   =   new   char[   strlen(pStr)   +   1   ];  
  strcpy(pEnMessage,   pStr);  
  }  
   
  //Encrypts   message   and   returns   encrypted   message  
  void   Message::encryptMessage()  
  {  
  int   across,   down;  
  int   i,   j;  
   
   
  cout   <<   "Encrypting   message..."   <<   endl;  
  cout   <<   endl   <<   pKey   <<   endl   <<   pUnMessage   <<   endl   <<   endl;  
  for(j   =   0;   j   <   strlen(pEnMessage);   j++)  
  {  
  for(i   =   0;   i   <   26;   i++)  
  {  
  if(   !(isalpha(pUnMessage[j])))  
  {  
  across   =   30;  
  break;  
  }  
   
  if(   (   toupper(pUnMessage[j])   ==   table[0][i]))  
  {  
  across   =   i;  
  break;  
  }  
  }  
   
  for(i   =   0;   i   <   26;   i++)  
  {  
  if(   !(isalpha(pUnMessage[j])))  
  {  
  down   =   30;  
  break;  
  }  
   
  if(   (   toupper(pKey[j])   ==   table[i][0]))  
  {  
  down   =   i;  
  break;  
  }  
  }  
   
  if(across   !=   30   &&   down   !=   30)  
  pEnMessage[j]   =   table[down][across];  
  }  
  cout   <<   pEnMessage   <<   endl   <<   endl;  
  }  
   
  void   Message::decryptMessage()  
  {  
  int   down,   across,   i,   j;  
   
  cout   <<   "Decrypting   message..."   <<   endl;  
  cout   <<   endl   <<   pKey   <<   endl   <<   pEnMessage   <<   endl   <<   endl;  
   
  for(j   =   0;   j   <   strlen(pEnMessage);   j++)  
  {  
  for(i   =   0;   i   <   26;   i++)  
  {  
  if(   !(isalpha(pKey[j])))  
  {  
  across   =   30;  
  break;  
  }  
   
  if(   (   toupper(pKey[j])   ==   table[0][i]))  
  {  
  across   =   i;  
  break;  
  }  
  }  
   
  for(i   =   0;   i   <   26;   i++)  
  {  
  if(   !(isalpha(pEnMessage[j])))  
  {  
  down   =   30;  
  break;  
  }  
   
  if(   (   toupper(pEnMessage[j])   ==   table[i][across]))  
  {  
  down   =   i;  
  break;  
  }  
  }  
   
  if(down   !=   30)  
  pUnMessage[j]   =   table[down][0];  
  }  
   
  cout   <<   pUnMessage   <<   endl;  
  }  
   
  //Returns   unencrypted   message  
  const   char*   Message::getUnMessage()   const  
  {  
  if(pUnMessage)  
  return   pUnMessage;  
  else  
  return   "null   pointer   (should   never   happen,   default   constructor   is   private";  
  }  
   
  //Returns   encrypted   message  
  const   char*   Message::getEnMessage()   const  
  {  
  if(   strcmp(pEnMessage,   pUnMessage))  
  return   pEnMessage;  
  else  
  return   "Message   not   yet   encrypted";  
  }  
   
   
  //Gets   message   to   encrypt  
  void   Message::getMessage()  
  {  
  char*   pTemp   =   new   char[256];  
   
  cout   <<   "Enter   your   message   (less   than   256   characters,   end   with   \"ENTER\":   "   <<   endl;  
  fflush(stdin);  
  cin.getline(pTemp,   256,   '\n');  
  cout   <<   endl;  
   
  pUnMessage   =   new   char[   strlen(pTemp)   +   1   ];  
  strcpy(pUnMessage,   pTemp);  
   
  pEnMessage   =   new   char[   strlen(pTemp)   +   1   ];  
  strcpy(pEnMessage,   pTemp);  
   
  delete[]   pTemp;  
  }  
   
  void   Message::getKey()  
  {  
  if(!pUnMessage)  
  {  
  cout   <<   "You   have   to   enter   the   message   before   you   enter   the   key."   <<   endl;  
  return;  
  }  
   
  char*   pTemp   =   new   char[32];  
   
  cout   <<   "Enter   your   key   (less   than   32   characters,   one   word)   that   ends   with   \"ENTER\":   "   <<   endl;  
  fflush(stdin);  
  cin.getline(pTemp,   32,   '\n');  
  cout   <<   endl;  
   
  pKey   =   new   char[   strlen(pUnMessage)   +   1   ];  
  strcpy(pKey,   pUnMessage);  
   
  int   i,   j;  
   
  for(i   =   0,   j   =   0;   i   <   strlen(pUnMessage),   j   <   strlen(pUnMessage);   i++,   j++)  
  {  
  if(pTemp[j]   &&   pKey[i])  
  {  
  pKey[i]   =   pTemp[j];  
  }  
  else   if(pTemp[j]   ==   '\0')  
  {  
  j   =   -1;  
  i--;  
  }  
  else  
  break;  
  }  
   
  delete[]   pTemp;  
  }  
   
   
  //Destructor  
  Message::~Message()  
  {  
  delete[]   pUnMessage;  
  delete[]   pEnMessage;  
  delete[]   pKey;  
  }  
   
  这是我从网上下载的源代码,还有两个头文件,table.h是一个26*26的字符数组,是26个英文大写字母.现在我编译没有错误,可是一运行就出致命的错误,系统就得结束程序.  
  我觉得问题应该出现在int   main(int   argc,   char*   argv[])函数中,我原来也试着编过此类型的函数,但是也是一运行就出错,我不知道这个函数到底怎么是用,即参数的值到底从哪里传过来的?都有什么可选项?我不知道,看了好多书都讲的不是太清楚.还请各位高手详细指点一下  
   
   
   
  多谢多谢  
  问题点数:100、回复次数:4Top

1 楼Flood1984(峰子)回复于 2004-11-03 13:16:37 得分 0

检查一下指针的指向是否明确(有没有没初始化的或者访问了NULL指针所指的成员)  
  Top

2 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2004-11-03 13:25:52 得分 50

命令行参数啊  
   
  帮助理解:  
   
  int   main(int   argc,char   *argv[])  
  {  
  int   count=0;  
  while(count<argc)  
  {  
  cout<<"arg"<<count<<":"<<argv[count]<<endl;  
  count++;  
  }  
  }  
  运行结果:  
  c>test   aoir   oir   oiud  
  arg0:test  
  arg1:aoir  
  arg2:oir  
  arg3:oiudTop

3 楼yegaofei(踏雪而歌)回复于 2004-11-03 20:42:17 得分 20

int   main(int   argc,   char*   argv[])函数  
   
  程序的入口点呀  
   
  致命错误一般都跟指针有关,再仔细看看Top

4 楼yegaofei(踏雪而歌)回复于 2004-11-03 20:45:05 得分 30

你的代码不完整  
  ==================  
  int   main(int   argc,   char*   argv[])  
  {  
  Message   myMessage;  
   
  if(argc   !=   2)  
  {  
  cout   <<   "usage:   "   <<   argv[0]   <<   ".exe   -d   or   -e"   <<   endl;  
  return   0;  
  }  
   
  if(   !strcmp(argv[1],   "-d"))  
  {  
  myMessage.getMessage();  
  myMessage.getKey();  
  myMessage.decryptMessage();  
  }  
   
   
  怎么这里就完了?Top

相关问题

  • 这个程序很奇怪??!!
  • 怎么编这个程序?
  • 看我这个程序
  • 如何遍这个程序??
  • 这个程序怎么编?
  • 请看看这个程序!!!!
  • 这个程序哪错了,
  • 这个程序怎么了??
  • 这个程序看不懂!!!
  • 这个程序那里错???

关键词

  • pstr
  • constructormessage
  • penmessage
  • punmessage
  • pkey
  • strcpy
  • strlen
  • argc
  • message
  • include

得分解答快速导航

  • 帖主:ringbellxxh
  • dragonzxh
  • yegaofei
  • yegaofei

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo