关于VC中的转义字符 如何在VC++中,让输入的字符串中包含双引号,或单引号
\uff08\u6c42\u52a9\uff09C++\u6216MFC\u4e2d\u5173\u4e8e\u8f6c\u4e49\u5b57\u7b26\u7684\u5904\u7406\u4e0d\u9700\u8981\u8f6c\u6362\u3002\u4f60\u7406\u89e3\u9519\u4e86\uff0c\u4e0d\u662f\u7cfb\u7edf\u5c06\u201c\\u201d\u5904\u7406\u4e3a\u8f6c\u4e49\u5b57\u7b26\uff0c\u800c\u662f\u7f16\u8bd1\u5668\u628a\u7528\u5f15\u53f7\u62ec\u8d77\u6765\u7684\u4e32\u91cc\u9762\u7684\\u4f5c\u4e3a\u8f6c\u4e49\u5b57\u7b26\u7684\u5f00\u59cb\u3002\u8f6c\u4e49\u5b57\u7b26\u662f\u4e13\u95e8\u7ed9\u7f16\u8bd1\u5668\u770b\u7684\u3002
\u4e5f\u5c31\u662f\u8bf4\u53ea\u6709\u5728\u4ee3\u7801\u4e2d\u5199\u7684"C:\\1.txt"\u8fd9\u79cd\u5730\u65b9\u624d\u4f1a\u6709\u8f6c\u4e49\u5b57\u7b26\uff0c\u771f\u6b63\u7a0b\u5e8f\u7f16\u8bd1\u5b8c\u6bd5\u4e4b\u540e\u5c31\u4e0d\u5b58\u5728\u8f6c\u4e49\u7684\u95ee\u9898\u4e86\u3002\u7a0b\u5e8f\u7f16\u8bd1\u5b8c\u6bd5\u4e4b\u540e\uff0c\u4e0a\u9762\u7684\u5b57\u7b26\u4e32\u5c31\u53d8\u4e3a\u4e86C:\1.txt\u3002
\u6bd4\u5982\u4f60\u5728\u4e00\u4e2a\u6587\u672c\u6587\u4ef6\u4e2d\u5199\u4e86 C:\1.txt\uff0c\u7136\u540e\u4f60\u7528\u7a0b\u5e8f\u8bfb\u53d6\u8fd9\u4e2a\u6587\u4ef6\uff0c\u8fd9\u91cc\u9762\u7684\\u5c31\u4e0d\u4f1a\u88ab\u8f6c\u4e49\u4e86\uff0c\u56e0\u4e3a\u8f6c\u4e49\u53ea\u662f\u5728\u7f16\u8bd1\u8fd9\u6b65\u8fdb\u884c\u7684\u3002
\u4e5f\u5c31\u662f\u8bf4\uff0c\u8f6c\u4e49\u53ef\u4ee5\u7406\u89e3\u4e3a\u662f\u53ea\u5728\u4ee3\u7801\u4e2d\u5b58\u5728\u7684\u4e00\u79cd\u7279\u6b8a\u5199\u6cd5\uff0c\u597d\u6bd4\u662f\u7a0b\u5e8f\u5458\u7ed9\u7f16\u8bd1\u5668\u5199\u7684\u6697\u53f7\uff0c\u4f60\u8981\u5728\u4ee3\u7801\u4e2d\u5199\u201c\\u201d\uff0c\u5c31\u5fc5\u987b\u5199\u6210\u201c\\\u201d\uff0c\u4f46\u662f\u5b9e\u9645\u4e0a\u7684\u672c\u610f\u8fd8\u662f\u201c\\u201d\uff0c\u5b57\u7b26\u4e32\u201c\\\\\u201d\u7684\u957f\u5ea6\u662f2\u800c\u4e0d\u662f4\uff08\u4e0d\u5305\u62ec\u5c3e\u90e8\0\u7684\u8bdd\uff09\uff0c\u56e0\u4e3a\u7f16\u8bd1\u5668\u4f1a\u628a\\\u8ba4\u4e3a\u662f\u4e00\u4e2a\u5b57\u7b26\uff0c\u7f16\u8bd1\u5b8c\u6bd5\u4e4b\u540e\\\u4f1a\u53d8\u6210\\u3002
\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014
\u8865\u5145\uff1a\u4f60\u90a3\u4e2a\u95ee\u9898\u7edd\u5bf9\u4e0d\u4f1a\u662f\u8f6c\u4e49\u5b57\u7b26\u6ca1\u6709\u8f6c\u6362\u9020\u6210\u7684\uff0c\u53ef\u80fd\u662f\u5176\u5b83\u539f\u56e0\uff0c\u591a\u8d34\u70b9\u4ee3\u7801\u51fa\u6765\u770b\u770b\u3002
\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014
\u518d\u8865\u5145\uff1apFrom\u8981\u6307\u5411\u4e00\u4e2a\u53cc\0\u7ed3\u5c3e\u7684\u5b57\u7b26\u4e32\u624d\u884c\u3002
\u5728
temp.pFrom=pApp->filename;
\u8fd9\u53e5\u7684\u524d\u9762\u52a0\u4e0a\u4e00\u53e5\uff1a
pApp->filename+='\0';
\u518d\u8bd5\u8bd5\uff0c\u5e94\u8be5\u5c31\u6ca1\u6709\u95ee\u9898\u4e86\u3002
C++ \u4e2d \ \u8868\u793a\u8f6c\u4e49\u7b26\u3002
\u4f8b\uff1aCString a = _T("\"); \u8fd9\u6837\u513f\u5199\u5c31\u4f1a\u51fa\u9519\uff0c\u56e0\u4e3a\\u662f\u8f6c\u4e49\u7b26\uff0c\u628a\u7b2c\u4e8c\u4e2a\u5f15\u53f7\u8f6c\u4e49\u4e86\u3002
\u5e94\u8be5\u5199\u6210 _T("\\"). \u540c\u7406\uff0c\u4f60\u8981\u8f93\u5165\u5b57\u7b26\u4e32\u4e2d\u6709\u5f15\u53f7\u6216\u5355\u5f15\u53f7\uff0c\u5c31\u5728\u7b26\u53f7\u524d\u9762\u52a0\u4e00\u4e2a\\uff0c\u544a\u8bc9\u7f16\u8bd1\u5668\\u540e\u9762\u7684\u662f\u5b57\u7b26\u4e32\u7684\u5185\u5bb9\u3002\u6ce8\uff1a\ \u53ea\u8f6c\u4e49\u540e\u9762\u4e00\u4f4d\u3002
转义字符 意义 ASCII码值(十进制)
\a 响铃(BEL) 007
\b 退格(BS) 008
\f 换页(FF) 012
\n 换行(LF) 010
\r 回车(CR) 013
\t 水平制表(HT) 009
\v 垂直制表(VT) 011
\\ 反斜杠 092
\? 问号字符 063
\' 单引号字符 039
\" 双引号字符 034
\0 空字符(NULL) 000
\ddd 任意字符 三位八进制
\xhh 任意字符 二位十六进制
\a:蜂鸣,响铃
\b:回退:向后退一格
\f:换页
\n:换行,光标到下行行首
\r:回车,光标到本行行首
\t:水平制表
\v:垂直制表
\\:反斜杠
\':单引号
\":双引号
\?:问号
\ddd:三位八进制
\xhh:二位十六进制
\0:空字符(NULL),什么都不做
注:
1,\v垂直制表和\f换页符对屏幕没有任何影响,但会影响打印机执行响应操作。
2,\n其实应该叫回车换行。换行只是换一行,不改变光标的横坐标;回车只是回到行首,不改变光标的纵坐标。
3,\t 光标向前移动四格或八格,可以在编译器里设置
4,\' 在字符里(即单引号里)使用。在字符串里(即双引号里)不需要,只要用 ' 即可。
5,\? 其实不必要。只要用 ? 就可以了(在windows VC6 和tc2 中验证)。
格式控制符参考:
格式输出字符:printf
使用:向终端输出若干个类型任意的数据。
形式:printf (格式控制符,输出列表)
说明:
格式控制符:% 格式说明引导符。
- 指定左对齐输出。
0 指定空位填零。
m.n 指定输出域宽度及精度。
l.h 输出长度的修正。
格式字符 指定输出的数据类型。
说明:
格式字符:指定输出项的数据类型和输出格式。
d 有符号十进制整数。
o 无符号八进制数。
x 无符号十六进制数。(小写的x格式中用小写字母a,b,c,d,e,f来表示10到15之间的数,大写的X则用大写的ABCDEF来表示10到15之间的数)
u 不带符号的十进制整数。
基本整型:两个字节,十六个bit(位)
11 11 11 11 11 11 11 11 等于 65535.
11 11 11 11 11 11 11 10 等于 -2.
负数的第一位(符号位)为1。负数的补码怎么得到:原码取反加一。2的二进制数为:00 00 00 00 00 00 00 10,取反就等于11 11 11 11 11 11 11 01,然后加1,二进制数逢二进一,所以就得出-2 的二进制代码。
有符号的整型数可以用 %d 输出。
无符号的整型数可以用 %u 输出。
电脑里存的数字都是二进制数,最高位是符号位还是数据位,可以由输出格式符来控制。
二进制数转换八进制数:三个 1 对应一个 7 。
二进制数錾十六进制数:四位二进制对应一位十六进制,四个1 对应一个 f。
说明:
格式字符:c 输出一个字符。
s 输出一个字符串。
e 以指数形式输出实型数。
f 以小数形式输出实型数。
g 自动决定输出格式为e和f中较短的一种,不打印无效的零。
% 输出%。
注意:对于单精度数,使用 %f 格式符输出时,仅前7位是有效数字,小数6位。
对于双精度数,使用 %lf 格式符输出时,前16位是有效数字,小数6位。
长度修正符
l:对整型指定长整型long
例:%ld , %lx , %lo , %lu
对实型指定双精度double
例:%lf
h:只用于整型的格式字符修正为short
例:%hd , %hx , %ho , %hu
对64位整数的输入输出,在POJ上的C++环境下(即VC++),64位整数是:
__int64
输入输出格式为”%I64d”.
在G++环境下, 64位整数是
long long
输入输出格式为”%lld”.
域宽及精度的描述
M:域宽,即对应的输出项在输出设备上所占字符数
若:实际数据宽度>M,按实际数据宽度输出。
实际数据宽度<M,左边补空。
N:精度,说明输出的实型数的小数位数。
几点说明:
编译程序只是检查printf 函数的调用形式,不分析格式控制字符串,如果格式字符与输出项的类型不匹配,不进行类型转换。(输出的数为随机)
格式字符要用小写字母。
格式控制字符串中可以包含转义字符。
格式控制字符串中的普通字符则原样输出。
输出项的参数除了常数、变量外还可以是表达式、函数调用。
%g,%f和%e这三个格式用于打印浮点值。
%g格式用于打印那些不需要按列对齐的浮点数特别有用。其作用有二:
一,去掉该数尾多余的零(没有达到六位的数)
二,保留六位有效数字(多余六位的)
%e格式用于打印浮点数时,一律显示地使用指数形式:例如:输出圆周率时是:3.141593e+00
两者的区别:
%g格式打印出的数是总共6位有效数字
%e格式打印出小数点后的6位有效数字
%f禁止使用指数形式来表示浮点数。因此圆周率输出为:3.141593
(但注意它的精度要求:也是小数点后6位有效数字)
(8)%%格式用于打印一个%字符。
(9)%E和%G只是在输出时用大写字母(E)代替了小写字母(e)
输出正负号的技巧,例如:
printf("%+d %+d %+d\n",-5,0,5);
只要在中间加个“+”号就行。作用是输出符号位(即,数的正负号)
如果不希望正数的前面出现‘+’号,可用下面的方法
只要在中间加个“ ”号(即:空格)就行。例如:
作用:如果一个数是非负数,就在它的前面插入一个空格。
int i;
for(i=-3;i<=3;i++)
printf("% d\n",i); //注意%和d之间有一个空格
sscanf()的使用技巧:
分解字符串,很多功能都需要正则表达式的知识,所以就介绍一下最简单的几种用sscanf来分解字符串 的用法。
1.
char str[100],str1[100],str2[100];
gets(str);
sscanf(str,”%s%s”,str1,str2);
将读入的一整行字符串按空格,制表符或回车符分割成两个字符串。
2
取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456 ", "%4s", str);
现在要这样,对str进行判断,如果出现除了\r\n的转义外,任何其他形式的转义都要报错。
比如str里面,出现了\c,所以要给出提示信息。
注:str.find("\");是会报错的,此法行不通!
因为比如\h和h的ascii码值一样,没法判断,让我头疼了!
不知哪位大侠能帮忙,指点指点!
vc??转移字符的判断问题------解决方案--------------------------------------------------------str.find("\\");
------解决方案--------------------------------------------------------转义字符不是你码代码的时候才有用么。执行的时候不都被编译器转成对应的ascii码了么。哪来的\给你找啊
------解决方案--------------------------------------------------------你查查转义符的匹配表,如\a
\d
\n
这些都有意义的东东加进个哈希表里,然后查表匹配给出警告。
由于字符编码的问题,在Windows下的Visual C++只支持如下转义字符:
\b:回退:向后退一格
\n:换行,光标到下行行首
\r:回车,光标到本行行首
\t:水平制表
\\:反斜杠
\':单引号
\":双引号
\?:问号
\ddd:三位八进制
\xhh:二位十六进制
\0:空字符(NULL)
和\a:响铃等
不支持\f换页和\v竖向Tab。
类似的问题还有,在输出表格线时,由于中文字符编码的问题,表格线会和后面一个字符的高8位ASCII码结合,成为一个汉字。这个问题可以通过转换为全角字符来解决,但是\f和\v我把256个ASCII码都输出了一遍,目前我的解决办法只有通过自己编写函数来解决。
绛旓細鎵鏈夌殑ASCII鐮侀兘鍙互鐢ㄢ淺鈥濆姞鏁板瓧锛堜竴鑸槸8杩涘埗鏁板瓧锛夋潵琛ㄧず銆傝孋涓畾涔変簡涓浜涘瓧姣嶅墠鍔"\"鏉ヨ〃绀哄父瑙佺殑閭d簺涓嶈兘鏄剧ず鐨凙SCII瀛楃锛屽\0,\t,\n绛夛紝灏辩О涓杞箟瀛楃锛屽洜涓哄悗闈㈢殑瀛楃锛岄兘涓嶆槸瀹冩湰鏉ョ殑ASCII瀛楃鎰忔濅簡銆傝浆涔夊瓧绗 鎰忎箟 ASCII鐮佸(鍗佽繘鍒)\a 鍝嶉搩(BEL) 007 \b 閫鏍(...
绛旓細鐜板湪瑕佽繖鏍凤紝瀵箂tr杩涜鍒ゆ柇锛屽鏋滃嚭鐜伴櫎浜哱r\n鐨勮浆涔澶栵紝浠讳綍鍏朵粬褰㈠紡鐨勮浆涔夐兘瑕佹姤閿欍傛瘮濡俿tr閲岄潰锛屽嚭鐜颁簡\c,鎵浠ヨ缁欏嚭鎻愮ず淇℃伅銆傛敞锛歴tr.Find("\");鏄細鎶ラ敊鐨勶紝姝ゆ硶琛屼笉閫氾紒鍥犱负姣斿\h鍜宧鐨凙scii鐮佸间竴鏍凤紝娌℃硶鍒ゆ柇锛岃鎴戝ご鐤间簡锛佷笉鐭ュ摢浣嶅ぇ渚犺兘甯繖锛屾寚鐐规寚鐐癸紒VC??杞Щ瀛楃鐨勫垽鏂棶棰--...
绛旓細姣斿鍥炶溅绗︼紝杩樻湁鍙屽紩鍙风瓑绛锛屽鏋滃瓧绗︿覆涓鍑虹幇杩欎簺绗﹀彿锛屽鏋滅洿鎺ヨ緭鍏ュ氨浼氳浠g爜璇硶鍑洪敊锛屾墍浠ュ氨鏈変簡杩欎釜杞箟绗︼紝姣斿\n浠h〃鍥炶溅绗︼紝\"浠h〃瀛楃涓蹭腑鏈変竴涓紩鍙凤紝閭d箞濡傛灉瑕佽緭鍏ヨ矾寰勭鍙烽偅鎬庝箞鍔烇紝
绛旓細鍦–绋嬪簭涓娇鐢ㄨ浆涔夊瓧绗ddd鎴栬匼xhh鍙互鏂逛究鐏垫椿鍦拌〃绀轰换鎰忓瓧绗銆俓 ddd涓烘枩鏉犲悗闈㈣窡涓変綅鍏繘鍒舵暟锛岃涓変綅鍏繘鍒舵暟鐨勫煎嵆涓哄搴旂殑鍏繘鍒禔SCII鐮佸笺俓 x鍚庨潰璺熶袱浣嶅崄鍏繘鍒舵暟锛岃涓や綅鍗佸叚杩涘埗鏁颁负瀵瑰簲瀛楃鐨勫崄鍏繘鍒禔SCII鐮佸笺備娇鐢ㄨ浆涔夊瓧绗︽椂闇瑕佹敞鎰忎互涓嬮棶棰橈細1) 杞箟瀛楃涓彧鑳戒娇鐢ㄥ皬鍐欏瓧姣嶏紝姣忎釜杞箟瀛...
绛旓細c璇█杞箟瀛楃锛囷技x锛囧拰锛囷技X锛囧尯鍒负锛欰SCII鐮佸间笉鍚屻佽〃绀轰笉鍚銆備竴銆丄SCII鐮佸间笉鍚 1銆佽浆涔夊瓧绗︼紘锛紉锛囷細杞箟瀛楃锛囷技x锛囩殑ASCII鐮佸间负120銆2銆佽浆涔夊瓧绗︼紘锛糥锛囷細杞箟瀛楃锛囷技X锛囩殑ASCII鐮佸间负88銆備簩銆佷笉鍚 1銆佽浆涔夊瓧绗︼紘锛紉锛囷細杞箟瀛楃锛囷技x锛囪〃绀哄悗闈㈢殑瀛楃鏄崄鍏繘鍒舵暟銆2銆佽浆涔夊瓧绗...
绛旓細6锛塡' 瀛楃閲锛堝嵆鍗曞紩鍙烽噷锛変娇鐢瀛楃涓查噷(鍗冲弻寮曞彿閲)闇瑕佸彧瑕佺敤 ' 鍗 7锛塡? 鍏跺疄蹇呰鍙鐢 ? 浜嗭紙windows VC6 鍜宼c2 楠岃瘉锛夐棶棰樹簲锛歝杞箟瀛楃 \c 鏄粈涔堟剰鎬 娌¤杩囷紝c閲屾湁杩欎釜杞箟瀛楃锛熷垰鎵嶈瘯浜嗙洿鎺ヨ緭鍑簆rintf(\c)锛岀粨鏋滃彧杈撳嚭浜嗕釜c銆備唬鐮侊細缁撴灉锛氶棶棰樺叚锛'\n' '\t' '\b'杞箟...
绛旓細涓殑涓滆タ鏄瓧绗︾殑鎰忔濓級杞寲锛屽彉鎴愬疄闄呯殑绗﹀彿 鍗曞紩鍙枫傝繖灏辨槸 \ 绗﹀彿鐨勬剰涔夛紝绉颁綔 [杞箟绗]锛屼綔鐢ㄥ氨鏄敼鍙樻煇浜涘瓧绗︽湰鏉ョ殑鎰忔濓紝濡 \鈥 灏辫〃绀哄張寮曞彿鏈韩锛岃屼笉鏄綔涓瀛楃涓鐨勮竟鐣岀銆俓0 琛ㄧずASCII鏁板间负 0 鐨勫瓧绗︼紝鍏跺畠鏁板瓧绫绘帹銆傚叿浣撶殑鍏跺畠鍙杞箟鐨勫瓧绗锛岃鍙傜収锛歨ttp://baike.baidu.com/view/...
绛旓細MFC閲涓嶆槸鏈変釜瀛楃涓绫诲瀷鏄疌String鍚楋紵CString str=FileN;str.Replace("\\鈥,"\\\");鐒跺悗浣犲啀鎶妔tr寮哄埗杞崲鍥濴PCTSTR锛孡PTSTR涔嬬被鐨勫氨琛屼簡
绛旓細杞箟瀛楃涓鍒嗘垚涓夐儴鍒嗭細绗竴閮ㄥ垎鏄竴涓紗绗﹀彿锛岃嫳鏂囧彨ampersand锛涚浜岄儴鍒嗘槸瀹炰綋锛圗ntity锛夊悕瀛楁垨鑰呮槸锛冨姞涓婂疄浣擄紙Entity锛夌紪鍙凤紱绗笁閮ㄥ垎鏄竴涓垎鍙枫傛瘮濡傦紝瑕佹樉绀哄皬浜庡彿锛堬紲锛夛紝灏卞彲浠ュ啓锛唋t;鎴栬咃紲銆傜敤瀹炰綋锛圗ntity锛夊悕瀛楃殑濂藉鏄瘮杈冨ソ鐞嗚В锛屼竴鐪媗t锛屽ぇ姒傚氨鐚滃嚭鏄痩ess than鐨勬剰鎬濓紝浣嗘槸鍏跺姡鍔垮湪浜庡苟...
绛旓細C璇█閲锛孿v鏄細鍨傜洿鍒惰〃銆傚湪C璇█涓紝鏈変竴绉嶇壒娈婂舰寮忕殑瀛楃甯搁噺锛屽氨鏄互涓涓瓧绗︹淺鈥濆紑澶寸殑瀛楃搴忓垪锛岃繖灏辨槸杞箟瀛楃銆傚洜涓衡淺鈥濆悗闈㈢殑瀛楃涓嶆槸瀹冩湰鏉ョ殑瀛楃鐨勬剰鎬濅簡銆傚父鐢ㄨ浆涔夊瓧绗︽湁锛歕a琛ㄧず鍝嶉搩锛沑b琛ㄧず閫鏍硷紝灏嗗綋鍓嶄綅缃Щ鍒板墠涓鍒楋紱\f琛ㄧず鎹㈤〉锛屽皢褰撳墠浣嶇疆绉诲埌涓嬮〉寮澶达紱\n琛ㄧず鎹㈣锛屽皢褰撳墠...