°´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·ҳ£¬°´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ£¬°´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿£¡
¡ª¡ª¡ª¡ªÎ´ÔĶÁÍꣿ¼ÓÈëÊéÇ©ÒѱãÏ´μÌÐøÔĶÁ£¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡translateHex£¨URLstr£§i¡¡£«¡¡2£§£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡i¡¡£«=¡¡2£»¡¡//¡¡Move¡¡past¡¡hex¡¡code¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡£ý¡¡else¡¡//¡¡An¡¡ordinary¡¡character¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡result£§j£§¡¡=¡¡URLstr£§i£§£»¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡return¡¡result£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡//¡¡Translate¡¡a¡¡single¡¡hex¡¡character£»¡¡used¡¡by¡¡¡¡
¡¡¡¡//¡¡decodeURLString£¨£©£º¡¡¡¡
¡¡¡¡static¡¡char¡¡translateHex£¨char¡¡hex£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡if£¨hex¡¡¡·=¡¡'A'£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡return¡¡£¨hex¡¡&¡¡0xdf£©¡¡'A'¡¡£«¡¡10£»¡¡¡¡
¡¡¡¡¡¡¡¡else¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡return¡¡hex¡¡'0'£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý£»¡¡¡¡
¡¡¡¡
//¡¡Parses¡¡any¡¡CGI¡¡query¡¡and¡¡turns¡¡it¡¡¡¡
//¡¡into¡¡an¡¡STL¡¡vector¡¡of¡¡Pair¡¡objects£º¡¡¡¡
class¡¡CGI_vector¡¡£º¡¡public¡¡vector¡¡£û¡¡¡¡
¡¡¡¡char*¡¡qry£»¡¡¡¡
¡¡¡¡const¡¡char*¡¡start£»¡¡//¡¡Save¡¡starting¡¡position¡¡¡¡
¡¡¡¡//¡¡Prevent¡¡assignment¡¡and¡¡copy¡construction£º¡¡¡¡
¡¡¡¡void¡¡operator=£¨CGI_vector&£©£»¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡568¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡570¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡CGI_vector£¨CGI_vector&£©£»¡¡¡¡
public£º¡¡¡¡
¡¡¡¡//¡¡const¡¡fields¡¡must¡¡be¡¡initialized¡¡in¡¡the¡¡C£«£«¡¡¡¡
¡¡¡¡//¡¡¡¨Constructor¡¡initializer¡¡list¡¨£º¡¡¡¡
¡¡¡¡CGI_vector£¨char*¡¡query£©¡¡£º¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡start£¨new¡¡char£§strlen£¨query£©¡¡£«¡¡1£§£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡qry¡¡=¡¡£¨char*£©start£»¡¡//¡¡Cast¡¡to¡¡non¡const¡¡¡¡
¡¡¡¡¡¡¡¡strcpy£¨qry£»¡¡query£©£»¡¡¡¡
¡¡¡¡¡¡¡¡Pair¡¡p£»¡¡¡¡
¡¡¡¡¡¡¡¡while£¨£¨p¡¡=¡¡nextPair£¨£©£©¡¡£¡=¡¡0£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡push_back£¨p£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡//¡¡Destructor£º¡¡¡¡
¡¡¡¡~CGI_vector£¨£©¡¡£û¡¡delete¡¡start£»¡¡£ý¡¡¡¡
private£º¡¡¡¡
¡¡¡¡//¡¡Produces¡¡name¡value¡¡pairs¡¡from¡¡the¡¡query¡¡¡¡¡¡
¡¡¡¡//¡¡string¡£¡¡Returns¡¡an¡¡empty¡¡Pair¡¡when¡¡there's¡¡¡¡¡¡
¡¡¡¡//¡¡no¡¡more¡¡query¡¡string¡¡left£º¡¡¡¡
¡¡¡¡Pair¡¡nextPair£¨£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡char*¡¡name¡¡=¡¡qry£»¡¡¡¡
¡¡¡¡¡¡¡¡if£¨name¡¡==¡¡0¡¡£ü£ü¡¡*name¡¡==¡¡'0'£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡return¡¡Pair£¨£©£»¡¡//¡¡End£»¡¡return¡¡null¡¡Pair¡¡¡¡
¡¡¡¡¡¡¡¡char*¡¡value¡¡=¡¡strchr£¨name£»¡¡'='£©£»¡¡¡¡
¡¡¡¡¡¡¡¡if£¨value¡¡==¡¡0£©¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡return¡¡Pair£¨£©£»¡¡//¡¡Error£»¡¡return¡¡null¡¡Pair¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡Null¡terminate¡¡name£»¡¡move¡¡value¡¡to¡¡start¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡of¡¡its¡¡set¡¡of¡¡characters£º¡¡¡¡
¡¡¡¡¡¡¡¡*value¡¡=¡¡'0'£»¡¡¡¡
¡¡¡¡¡¡¡¡value£«£«£»¡¡¡¡
¡¡¡¡¡¡¡¡//¡¡Look¡¡for¡¡end¡¡of¡¡value£»¡¡marked¡¡by¡¡'&'£º¡¡¡¡
¡¡¡¡¡¡¡¡qry¡¡=¡¡strchr£¨value£»¡¡'&'£©£»¡¡¡¡
¡¡¡¡¡¡¡¡if£¨qry¡¡==¡¡0£©¡¡qry¡¡=¡¡¡¨¡¨£»¡¡//¡¡Last¡¡pair¡¡found¡¡¡¡
¡¡¡¡¡¡¡¡else¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡*qry¡¡=¡¡'0'£»¡¡//¡¡Terminate¡¡value¡¡string¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡qry£«£«£»¡¡//¡¡Move¡¡to¡¡next¡¡pair¡¡¡¡
¡¡¡¡¡¡¡¡£ý¡¡¡¡
¡¡¡¡¡¡¡¡return¡¡Pair£¨name£»¡¡value£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
£ý£»¡¡///£º~¡¡¡¡
¡¡¡¡
ÔÚ#include¡¡Óï¾äºó£¬¿É¿´µ½ÓÐÒ»ÐÐÊÇ£º¡¡¡¡
using¡¡namespace¡¡std£»¡¡¡¡
C£«£«Öеġ°ÃüÃû¿Õ¼ä¡±£¨Namespace£©½â¾öÁËÓÉJava¡¡µÄpackage¡¡¸ºÔðµÄÒ»¸öÎÊÌ⣺½«¿âÃûÒþ²ØÆðÀ´¡£stdÃüÃû¡¡
¿Õ¼äÒýÓõÄÊDZê×¼C£«£«¿â£¬¶ø¡¡vector¡¡¾ÍÔÚÕâ¸ö¿âÖУ¬ËùÒÔÕâÒ»ÐÐÊDZØÐèµÄ¡£¡¡¡¡
Pair¡¡Àà±íÃæ¿´Òì³£¼òµ¥£¬Ö»ÊÇÈÝÄÉÁËÁ½¸ö£¨private£©×Ö·ûÖ¸Õë¶øÒÑ¡ª¡ªÒ»¸öÓÃÓÚÃû×Ö£¬ÁíÒ»¸öÓÃÓÚÖµ¡£Ä¬¡¡
ÈϹ¹½¨Æ÷½«ÕâÁ½¸öÖ¸Õë¼òµ¥µØÉèΪÁã¡£ÕâÊÇÓÉÓÚÔÚ¡¡C£«£«ÖУ¬¶ÔÏóµÄÄÚ´æ²»»á×Ô¶¯ÖÃÁã¡£µÚ¶þ¸ö¹¹½¨Æ÷µ÷Ó÷½¡¡
·¨¡¡decodeURLString£¨£©£¬ÔÚзÖÅäµÄ¶ÑÄÚ´æÖÐÉú³ÉÒ»¸ö½âÂë¹ýºóµÄ×Ö´®¡£Õâ¸öÄÚ´æÇøÓò±ØÐëÓɶÔÏó¸ºÔð¹ÜÀí¡¡
¼°Çå³ý£¬ÕâÓë¡°ÆÆ»µÆ÷¡±Öмûµ½µÄÏàͬ¡£name£¨£©ºÍ¡¡value£¨£©·½·¨ÎªÏà¹ØµÄ×ֶβúÉúÖ»¶ÁÖ¸Õë¡£ÀûÓá¡empty£¨£©·½¡¡
·¨£¬ÎÒÃDzéѯPair¡¡¶ÔÏóËüµÄij¸ö×Ö¶ÎÊÇ·ñΪ¿Õ£»·µ»ØµÄ½á¹ûÊÇÒ»¸ö¡¡bool¡ª¡ªC£«£«ÄÚ½¨µÄ»ù±¾²¼¶ûÊý¾ÝÀàÐÍ¡£¡¡
operator¡¡bool£¨£©Ê¹ÓõÄÊÇ¡¡C£«£«¡¡¡°ÔËËã·û¹ýÔØ¡±µÄÒ»ÖÖÌØÊâÐÎʽ¡£ËüÔÊÐíÎÒÃÇ¿ØÖÆ×Ô¶¯ÀàÐÍת»»¡£Èç¹ûÓÐÒ»¸ö¡¡
ÃûΪp¡¡µÄPair¡¡¶ÔÏ󣬶øÇÒÔÚÒ»¸ö±¾À´Ï£ÍûÊDz¼¶û½á¹ûµÄ±í´ïʽÖÐʹÓ㬱ÈÈç¡¡if£¨p£©£û//¡£¡£¡££¬ÄÇô±àÒëÆ÷Äܱ桡
±ð³öËüÓÐÒ»¸öPair£¬¶øÇÒÐèÒªµÄÊǸö²¼¶ûÖµ£¬ËùÒÔ×Ô¶¯µ÷Óá¡operator¡¡bool£¨£©£¬½øÐбØÒªµÄת»»¡£¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡569¡¡
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Page¡¡571¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
½ÓÏÂÀ´µÄÈý¸ö·½·¨ÊôÓÚ³£¹æ±àÂ룬ÔÚC£«£«Öд´½¨Ààʱ±ØÐëÓõ½ËüÃÇ¡£¸ù¾ÝC£«£«Àà²ÉÓõÄËùν¡°¾µäÐÎʽ¡±£¬ÎÒ¡¡
ÃDZØÐ붨Òå±ØÒªµÄ¡°Ôʼ¡±¹¹½¨Æ÷£¬ÒÔ¼°Ò»¸ö¸±±¾¹¹½¨Æ÷ºÍ¸³ÖµÔËËã·û¡ª¡ªoperator=¡¡£¨ÒÔ¼°ÆÆ»µÆ÷£¬ÓÃÓÚÇå¡¡
³ýÄڴ棩¡£Ö®ËùÒÔÒª×÷ÕâÑùµÄ¶¨Ò壬ÊÇÓÉÓÚ±àÒëÆ÷»á¡°Ä¬Ä¬¡±µØµ÷ÓÃËüÃÇ¡£ÔÚ¶ÔÏó´«Èë¡¢´«³öÒ»¸öº¯ÊýµÄʱ¡¡
ºò£¬ÐèÒªµ÷Óø±±¾¹¹½¨Æ÷£»¶øÔÚ·ÖÅä¶ÔÏóʱ£¬ÐèÒªµ÷Óø³ÖµÔËËã·û¡£Ö»ÓÐÕæÕýÕÆÎÕÁ˸±±¾¹¹½¨Æ÷ºÍ¸³ÖµÔËËã¡¡
·ûµÄ¹¤×÷ÔÀí£¬²ÅÄÜÔÚ¡¡C£«£«Àïд³öÕæÕý¡°½¡×³¡±µÄÀ࣬µ«ÕâÐèÒªÐèÒªÒ»¸ö±È½Ï¼è¿àµÄ¹ý³Ì£¨×¢Ê͢ݣ©¡£¡¡¡¡
¡¡¡¡
¢Ý£ºÎҵġ¶Thinking¡¡in¡¡C£«£«¡·£¨Prentice¡Hall£»1995£©ÓÃÁËÒ»ÕûÕµĵط½À´ÌÖÂÛÕâ¸öÖ÷Ìâ¡£ÈôÐè¸ü¶àµÄ°ï¡¡
Öú£¬ÇëÎñ±Ø¿´¿´ÄÇÒ»Õ¡£¡¡¡¡
¡¡¡¡
Ö»Òª½«Ò»¸ö¶ÔÏó°´Öµ´«Èë»ò´«³öº¯Êý£¬¾Í»á×Ô¶¯µ÷Óø±±¾¹¹½¨Æ÷Pair£¨const¡¡Pair&£©¡£Ò²¾ÍÊÇ˵£¬¶ÔÓÚ×¼±¸¡¡
ΪÆäÖÆ×÷Ò»¸öÍêÕû¸±±¾µÄÄǸö¶ÔÏó£¬ÎÒÃDz»×¼±¸ÔÚº¯Êý¿ò¼ÜÖд«µÝËüµÄµØÖ·¡£Õâ²¢²»ÊÇJava¡¡ÌṩµÄÒ»¸öÑ¡¡¡
ÏÓÉÓÚÎÒÃÇÖ»ÄÜ´«µÝ¾ä±ú£¬ËùÒÔÔÚJava¡¡ÀïûÓÐËùνµÄ¸±±¾¹¹½¨Æ÷£¨Èç¹ûÏëÖÆ×÷Ò»¸ö±¾µØ¸±±¾£¬¿ÉÒÔ¡°¿Ë¡¡
¡¡±ÄǸö¶ÔÏ󡪡ªÊ¹Óá¡clone£¨£©£¬²Î¼ûµÚ12¡¡Õ£©¡£ÀàËÆµØ£¬Èç¹ûÔÚ¡¡Java¡¡Àï·ÖÅäÒ»¸ö¾ä±ú£¬Ëü»á¼òµ¥µØ¸´¡¡
ÖÆ¡£µ«¡¡C£«£«Öеĸ³ÖµÒâζ×ÅÕû¸ö¶ÔÏó¶¼»á¸´ÖÆ¡£ÔÚ¸±±¾¹¹½¨Æ÷ÖУ¬ÎÒÃÇ´´½¨ÐµĴ洢¿Õ¼ä£¬²¢¸´ÖÆÔʼÊý¡¡
¾Ý¡£µ«¶ÔÓÚ¸³ÖµÔËËã·û£¬ÎÒÃDZØÐëÔÚ·ÖÅäд洢¿Õ¼ä֮ǰÊÍ·ÅÀÏ´æ´¢¿Õ¼ä¡£ÎÒÃÇÒª¼ûµ½µÄÒ²ÐíÊÇ¡¡C£«£«Àà×¡¡
ÔÓµÄÒ»ÖÖÇé¿ö£¬µ«ÄÇÕýÊÇJava¡¡µÄÖ§³ÖÕßÃÇÂÛÖ¤Java¡¡±ÈC£«£«¼òµ¥µÃ¶àµÄÓÐÁ¦Ö¤¾Ý¡£ÔÚ¡¡Java¡¡ÖУ¬ÎÒÃÇ¿ÉÒÔ×ÔÓÉ¡¡
´«µÝ¾ä±ú£¬Éƺó¹¤×÷ÔòÓÉÀ¬»øÊÕ¼¯Æ÷¸ºÔð£¬ËùÒÔ¿ÉÒÔÇáËÉÐí¶à¡£¡¡¡¡
µ«ÊÂÇ鲢ûÓÐÍê¡£Pair¡¡ÀàΪnm¡¡ºÍ¡¡val¡¡Ê¹ÓõÄÊÇchar*£¬×ÔÓµÄÇé¿öÖ÷ÒªÊÇÎ§ÈÆÖ¸ÕëÕ¹¿ªµÄ¡£Èç¹ûÓýÏʱ÷Ö¡¡
µÄC£«£«¡¡string¡¡ÀàÀ´´úÌæchar*£¬ÊÂÇé¾ÍÒª±äµÃ¼òµ¥µÃ¶à£¨µ±È»£¬²¢²»ÊÇËùÓбàÒëÆ÷¶¼ÌṩÁ˶ԡ¡string¡¡µÄÖ§¡¡
³Ö£©¡£ÄÇô£¬Pair¡¡µÄµÚÒ»²¿·Ö¿´ÆðÀ´¾ÍÏóÏÂÃæÕâÑù£º¡¡¡¡
¡¡¡¡
class¡¡Pair¡¡£û¡¡¡¡
¡¡¡¡string¡¡nm£»¡¡¡¡
¡¡¡¡string¡¡val£»¡¡¡¡
public£º¡¡¡¡
¡¡¡¡Pair£¨£©¡¡£û¡¡£ý¡¡¡¡
¡¡¡¡Pair£¨char*¡¡name£»¡¡char*¡¡value£©¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡nm¡¡=¡¡decodeURLString£¨name£©£»¡¡¡¡
¡¡¡¡¡¡¡¡val¡¡=¡¡decodeURLString£¨value£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡const¡¡char*¡¡name£¨£©¡¡const¡¡£û¡¡return¡¡nm¡£c_str£¨£©£»¡¡£ý¡¡¡¡
¡¡¡¡const¡¡char*¡¡value£¨£©¡¡const¡¡£û¡¡¡¡¡¡
¡¡¡¡¡¡¡¡return¡¡val¡£c_str£¨£©£»¡¡¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡//¡¡Test¡¡for¡¡¡¨emptiness¡¨¡¡¡¡
¡¡¡¡bool¡¡empty£¨£©¡¡const¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡return¡¡£¨nm¡£length£¨£©¡¡==¡¡0£©¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡£ü£ü¡¡£¨val¡£length£¨£©¡¡==¡¡0£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡//¡¡Automatic¡¡type¡¡conversion¡¡for¡¡boolean¡¡test£º¡¡¡¡
¡¡¡¡operator¡¡bool£¨£©¡¡const¡¡£û¡¡¡¡
¡¡¡¡¡¡¡¡return¡¡£¨nm¡£length£¨£©¡¡£¡=¡¡0£©¡¡¡¡¡¡
¡¡¡¡¡¡¡¡¡¡¡¡&&¡¡£¨val¡£length£¨£©¡¡£¡=¡¡0£©£»¡¡¡¡
¡¡¡¡£ý¡¡¡¡
¡¡¡¡
¡¡£¨´ËÍ⣬¶ÔÕâ¸öÀàdecodeURLString£¨£©»á·µ»ØÒ»¸ö¡¡string£¬¶ø²»ÊÇÒ»¸öchar*£©¡£ÎÒÃDz»±Ø¶¨Ò帱±¾¹¹½¨¡¡
Æ÷¡¢operator=»òÕßÆÆ»µÆ÷£¬ÒòΪ±àÒëÆ÷ÒѰïÎÒÃÇ×öÁË£¬¶øÇÒ×öµÃ·Ç³£ºÃ¡£µ«¼´Ê¹ÓÐЩÊÂÇéÊÇ×Ô¶¯½øÐе쬡¡
C£«£«³ÌÐòÔ±Ò²±ØÐëÁ˽⸱±¾¹¹½¨ÒÔ¼°¸³ÖµµÄϸ½Ú¡£¡¡¡¡
Pair¡¡ÀàʣϵIJ¿·ÖÓÉÁ½¸ö·½·¨¹¹³É£ºdecodeURLString£¨£©ÒÔ¼°Ò»¸ö¡°°ïÖúÆ÷¡±·½·¨translateHex£¨£©¡ª¡ª½«ÓÉ¡¡
decodeURLString£¨£©Ê¹Óá£×¢Òâ¡¡translateHex£¨£©²¢²»ÄÜ·À·¶Óû§µÄ¶ñÒâÊäÈ룬±ÈÈç¡°£¥1H¡±¡£·ÖÅäºÃ×ã¹»µÄ´æ¡¡
´¢¿Õ¼äºó£¨±ØÐëÓÉÆÆ»µÆ÷ÊÍ·Å£©£¬decodeURLString£¨£©¾Í»áÆäÖбéÀú£¬½«ËùÓС°£«¡±¶¼»»³ÉÒ