超难的字符串比较有关问题
超难的字符串比较问题
小弟定义了一个char* 和TCHAR数组两个变量
现在想判断char*里面的内容是否在TCHAR数组中
通过strstr/strcmp比较的话类型又不匹配。郁闷ing~
------解决方案--------------------
VC里面定义 typedef char TCHAR, *PTCHAR;
strstr() 是可以用的,再仔细一点看看
------解决方案--------------------
如果你定义了_MBCS,那么typedef char TCHAR,你可以用strstr/strcmp比较分析.
如果你定义了_UNICODE,则typedef wchar_t TCHAR,你就不能直接用函数比较,用mbstowcs(...) 或是MultibyteToWideChar(...),将char* 转成wchar_t*,再用wcscmp/wcsstr比较
感觉你这样做不太好,如果想支持多语言,都定义成TCHAR比较好.
------解决方案--------------------
char * P1 = "123 ";
TCHAR t_CHAR[20] = "1111234444 ";
CString s;
//s.Format( "%t ",P1);
s = (LPCTSTR)(LPSTR)t_CHAR;
if(s.Find(P1,1)> 0)
AfxMessageBox( "Find! ");
------解决方案--------------------
#include <string.h>
_TCHAR szFileName[1024];
char* temp = "A ";
if(strstr(szFileName,temp)> 0)
{
//find it
}
------解决方案--------------------
添加这个语句就可以了
#include <tchar.h>
不推荐混用char 和 TCHAR,因为TCHAR是被设计用于通用字符类型的,根据是否定义了UNICODE宏,它可以表示Unicode字符或者MBCS字符。比较的时候,使用lstrcmp等函数对TCHAR字符串进行操作。
------解决方案--------------------
楼主是不是定义了
#define UNICODE
才比较麻烦的?楼上各位都没理解楼主意思啊.
这样的比较如果是ascii的字符,那比较容易,就是
asc编码每个字符后面加多一个0,但是如果包含文字,就无法这样判断了.所以,这个方法是不通用的,都转成CString是不可以的.虽然都是 "测试 ",但比较结果肯定不同.如何实现我也不知道.关注楼主帖子,如果找到方法记得来这里公布以下啊.
------解决方案--------------------
to yaozijian110
如果我定义TCHAR temp = "A "; 怎么这句会报错?
本来就不能这样写啊,
TCHAR temp = TEXT( 'A ');
------解决方案--------------------
#include <string.h>
#include <tchar.h>
void main(){
_TCHAR szFileName[1024];
char* temp = "A ";
TCHAR * temp1 = "A ";
if(strstr(szFileName,temp)> 0)
{
//find it
}
}
------解决方案--------------------
TCHAR数组与char*不匹配说明你定义了UNICODE
你一定要用strstr的话呢,可以下面这样做
TCHAR * a;
char * b;
strstr(WTA(b),a);
------解决方案--------------------
W2A 前要加 USES_CONVERSION,还得 include <atlconv.h>
小弟定义了一个char* 和TCHAR数组两个变量
现在想判断char*里面的内容是否在TCHAR数组中
通过strstr/strcmp比较的话类型又不匹配。郁闷ing~
------解决方案--------------------
VC里面定义 typedef char TCHAR, *PTCHAR;
strstr() 是可以用的,再仔细一点看看
------解决方案--------------------
如果你定义了_MBCS,那么typedef char TCHAR,你可以用strstr/strcmp比较分析.
如果你定义了_UNICODE,则typedef wchar_t TCHAR,你就不能直接用函数比较,用mbstowcs(...) 或是MultibyteToWideChar(...),将char* 转成wchar_t*,再用wcscmp/wcsstr比较
感觉你这样做不太好,如果想支持多语言,都定义成TCHAR比较好.
------解决方案--------------------
char * P1 = "123 ";
TCHAR t_CHAR[20] = "1111234444 ";
CString s;
//s.Format( "%t ",P1);
s = (LPCTSTR)(LPSTR)t_CHAR;
if(s.Find(P1,1)> 0)
AfxMessageBox( "Find! ");
------解决方案--------------------
#include <string.h>
_TCHAR szFileName[1024];
char* temp = "A ";
if(strstr(szFileName,temp)> 0)
{
//find it
}
------解决方案--------------------
添加这个语句就可以了
#include <tchar.h>
不推荐混用char 和 TCHAR,因为TCHAR是被设计用于通用字符类型的,根据是否定义了UNICODE宏,它可以表示Unicode字符或者MBCS字符。比较的时候,使用lstrcmp等函数对TCHAR字符串进行操作。
------解决方案--------------------
楼主是不是定义了
#define UNICODE
才比较麻烦的?楼上各位都没理解楼主意思啊.
这样的比较如果是ascii的字符,那比较容易,就是
asc编码每个字符后面加多一个0,但是如果包含文字,就无法这样判断了.所以,这个方法是不通用的,都转成CString是不可以的.虽然都是 "测试 ",但比较结果肯定不同.如何实现我也不知道.关注楼主帖子,如果找到方法记得来这里公布以下啊.
------解决方案--------------------
to yaozijian110
如果我定义TCHAR temp = "A "; 怎么这句会报错?
本来就不能这样写啊,
TCHAR temp = TEXT( 'A ');
------解决方案--------------------
#include <string.h>
#include <tchar.h>
void main(){
_TCHAR szFileName[1024];
char* temp = "A ";
TCHAR * temp1 = "A ";
if(strstr(szFileName,temp)> 0)
{
//find it
}
}
------解决方案--------------------
TCHAR数组与char*不匹配说明你定义了UNICODE
你一定要用strstr的话呢,可以下面这样做
TCHAR * a;
char * b;
strstr(WTA(b),a);
------解决方案--------------------
W2A 前要加 USES_CONVERSION,还得 include <atlconv.h>