VC++,关于字符的替代的问题

我想用MFC新创建一个对话框程序,有2个编辑框和1个按钮,要求按下按钮后,字、字符从其中一个编辑框显示到另一个编辑框。
现在的问题是,如何实现把敏感的、不合法的字和字符屏蔽,比如说自动替换成*(星号)。
我认为好像是要用到Find函数和Replace函数,但是这2个函数的返回值什么的我还不清楚,望各位指教。
最新回答
其实我过得并不好

2024-04-19 00:22:31

23.CString::Find
int Find( TCHAR ch ) const;
int Find( LPCTSTR lpszSub ) const;
int Find( TCHAR ch, int nStart ) const;
int Find( LPCTSTR lpszSub, int nStart ) const;
返回值: 不匹配的话返回 -1; 索引以0 开始; nStar 代表以索引值nStart 的字符开始搜索 ,
即为包含以索引nStart字符后的字符串.
示例:
CString s( "abcdef" );
ASSERT( s.Find( 'c' ) == 2 );
ASSERT( s.Find( "de" ) == 3 );
Cstring str(“The stars are aligned”);
Ing n = str.Find('e',5);
ASSERT(n == 12)
10.CString::Replace
int Replace( TCHAR chOld, TCHAR chNew );
int Replace( LPCTSTR lpszOld, LPCTSTR lpszNew );
返回值:返回被替换的字符数。如果这个字符串没有改变则返回零。
参数:chOld 要被chNew 替换的字符。
chNew 要用来替换chOld 的字符。
lpszOld 一个指向字符串的指针,该字符串包含了要被lpszNew 替换的字符。
LpszNew 一个指向字符串的指针,该字符串包含了要用来替换lpszOld 的字符。
说明:此成员函数用一个字符替换另一个字符。函数的第一个原形在字符串中用chNew
现场替换chOld。函数的第二个原形用lpszNew 指定的字符串替换lpszOld 指定
的子串。
在替换之后,该字符串有可能增长或缩短;那是因为lpszNew 和lpszOld 的长度
不需要是相等的。两种版本形式都进行区分大小写的匹配。
示例:
// 第一个例子,old 和new 具有相同的长度。
CString strZap( “C - -” );
int n = strZap.Replace('-', '+' );
ASSERT( n == 2 );
ASSERT(strZap == “C++” );
// 第二个例子,old 和new 具有不同的长度。
CString strBang( “Everybody likes ice hockey” );
n = strBang.Replace( “hockey”, “golf” );
ASSERT( n ==1 );
n = strBang.Replace ( “likes” , “plays” );
ASSERT( n == 1 );
n = strBang.Replace( “ice”, NULL );
ASSERT( n == 1 );
ASSERT( strBang == “Everybody plays golg” );
// 注意,现在在你的句子中有了一个额外的空格。
// 要移走这个额外的空格,可以将它包括在要被替换的字符串中,例如,“ice ”。
追问
就是说Find函数和Replace函数的返回值都是int型的?还有,ASSERT是什么?
追答
ASSERT( booleanExpression );
首先:booleanExpression 参数是一个bool表达式。
用法:
当程序运行到该语句的时候,程序会检查booleanExpression 这个表达式是真还是假。
如果条件符合,程序继续运行下面的代码;
如果是不符合,那么持续运行会被卡在这里。不往下面走,并有程序弹出错误对话框,指示是由于booleanExpression 这个条件符合导致的报错。
作用:
ASSERT(booleanExpression )语句一般用来检查一些必须符合的条件,如果不符合条件,则不让程序继续运行下去。

比如:
一个班有55个人,有一个函数可以对班上的55个人进行处理,一个单独处理一个同学也可以,也可以同时处理多个同学。函数申明为:CONTROLSTUDENT(int number);其中number为要处理的学生的个数。
在使用CONTROLSTUDENT函数前,一般我们会使用
ASSERT(number<=55);
CONTROLSTUDENT(number);
这样可以保证输入的学生数目绝对小于等于55个人。
如果输入的number参数大于55,程序将报错,不执行。

总结:该指令可以用来做为某些条件的防护,避免不符合条件的东西产生导致程序的崩溃
追问
不如你就举个例子吧,比如说我要把“我要造反”屏蔽成“我要**”,怎么做呢?什么代码?
汤圆

2024-04-19 15:36:33

用MSDN查一下就知道了。
影魅

2024-04-19 00:09:08

CString::Find 返回找到的字符或字符串的第一个字符的下标,如果没找到返回-1

CString::Replace返回有几个字符或者字符串被替换掉了,如果没有被替换返回0.

CString str(_T("abcabc"));
str.Replace(_T("ab"), _T("*"));
替换之后abcabc变成*c*c,返回2.

处理中文替换千万注意编码,如果使用ANSI编码,两个字节一个字符,查找函数有可能行为会很怪异。最好用全宽字符(wchar_t)。
追问
你那个例子是已知整个String了,那假如像我题目中所说的,String是不确定的,那不是要先查找嘛,那是不是要用到if(CString::Find(。。。)) CString::Replace("","");