在 VC++ 中如何查找字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在 VC++ 中如何查找字符串相关的知识,希望对你有一定的参考价值。

比如 "feifei" 这个字符串,怎样查找它是否包含 "f" 这个字符呢
刚才没说清楚,"feifei" 这个是 _TCHAR 类型的,都可以吗?...

    字符查找函数    
      //查找字符串中指定字符第一次出现的位置   
            LPTSTR StrChr( LPCTSTR lpStart,TCHAR wMatch); //区分大小写   
            char *strchr( const char *string, int c );   
            wchar_t *wcschr( const wchar_t *string, wchar_t c );   
            LPTSTR StrChrI( LPCTSTR lpStart,TCHAR wMatch); //不区分大小写   

          //查找字符串中指定字符最后一次出现的位置   
          LPTSTR StrRChr( LPCTSTR lpStart,LPCTSTR lpEnd,TCHAR wMatch); //区分大小写   
          char *strrchr( const char*string, int c );   
            wchar *wcsrchr( const wchar_t *string, int c );   
            LPTSTR StrRChrI( LPCTSTR lpStart,LPCTSTR lpEnd,TCHAR wMatch); //不区分大小写    
              *注 StrRChr()函数可以通过StrChr()函数和while循环来实现

    补充:   
    查找字符串:   

        _tcsstr(........)   

    字符串转化为double型数字   

        _tcstod( const char *nptr, char **endptr )   

    字符串转化为double型整数(只取整数部分,不取小数)Convert strings to a long-integer value.   

        _tcstoul ( const char *nptr, char **endptr, int base )   

        _tcstol ( const char *nptr, char **endptr, int base )   

    取子字符串   

    Extracts a substring of length nCount characters from this CStringT object, starting at position iFirst (zero-based).   

    CStringT Mid(   
    int iFirst,   
    int nCount   
    ) const;   
    CStringT Mid(   
    int iFirst   
    ) const;   

    example:   

    //typedef CStringT < TCHAR, StrTraitATL < TCHAR > > CAtlString;   

    CAtlString s( _T("abcdef") );   
    _ASSERT( s.Mid( 2, 3 ) == _T("cde") );

参考技术A #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

//ANSI版本
int searchi(const char *buffer, const char *keyword)

int k_len, b_len, ch_matches, found, i, j;
b_len = strlen(buffer);
k_len = strlen(keyword);
if (!b_len || !k_len)
return -1;
ch_matches = found = 0;
for (i=0; i<b_len-k_len; i++)
ch_matches = 0;
for (j=0; j<k_len; j++)
if (tolower(buffer[i+j]) == tolower(keyword[j]))
ch_matches++;
if (ch_matches == k_len)
found++;
i += k_len;




return found;


int search(const char *buffer, const char *keyword)

int k_len, b_len, ch_matches, found, i, j;
b_len = strlen(buffer);
k_len = strlen(keyword);
if (!b_len || !k_len)
return -1;
ch_matches = found = 0;
for (i=0; i<b_len-k_len; i++)
ch_matches = 0;
for (j=0; j<k_len; j++)
if (buffer[i+j] == keyword[j])
ch_matches++;
if (ch_matches == k_len)
found++;
i += k_len;




return found;


//UNICODE版本
int searchiw(const char *buffer, const char *keyword)

int k_len, b_len, ch_matches, found, i, j;
char *temp_keyword;
b_len = strlen(buffer);
k_len = strlen(keyword);
if (b_len < 2 || k_len < 2) /* Useless, for words only */
return -1;
if (keyword[0] != ' ' && keyword[k_len-1] != ' ')
temp_keyword = (char *)calloc(k_len+3, sizeof(char));
if (!temp_keyword)
return -1;
temp_keyword[0] = ' ';
strcat(temp_keyword, keyword);
strcat(temp_keyword, " ");

else if (keyword[0] == ' ' && keyword[k_len-1] != ' ')
temp_keyword = (char *)calloc(k_len+2, sizeof(char));
if (!temp_keyword)
return -1;
strcat(temp_keyword, keyword);
strcat(temp_keyword, " ");

else if (keyword[0] != ' ' && keyword[k_len-1] == ' ')
temp_keyword = (char *)calloc(k_len+2, sizeof(char));
if (!temp_keyword)
return -1;
temp_keyword[0] = ' ';
strcat(temp_keyword, keyword);

else
/* If we get to here and no if statement has executed, keyword already has whitespaces
surrounding it */
temp_keyword = (char *)calloc(k_len+1, sizeof(char));
if (!temp_keyword)
return -1;
strcpy(temp_keyword, keyword);

ch_matches = found = 0;
k_len = strlen(temp_keyword); /* Calculate new string length */
for (i=0; i<b_len-k_len; i++)
ch_matches = 0;
for (j=0; j<k_len; j++)
if (buffer[i+j] == temp_keyword[j])
ch_matches++;
if (ch_matches == k_len)
found++;
i += k_len;




if (temp_keyword != NULL)
free(temp_keyword);
return found;


int searchw(const char *buffer, const char *keyword)

int k_len, b_len, ch_matches, found, i, j;
char *temp_keyword;
b_len = strlen(buffer);
k_len = strlen(keyword);
if (b_len < 2 || k_len < 2) /* Useless, for words only */
return -1;
if (keyword[0] != ' ' && keyword[k_len-1] != ' ')
temp_keyword = (char *)calloc(k_len+3, sizeof(char));
if (!temp_keyword)
return -1;
temp_keyword[0] = ' ';
strcat(temp_keyword, keyword);
strcat(temp_keyword, " ");

else if (keyword[0] == ' ' && keyword[k_len-1] != ' ')
temp_keyword = (char *)calloc(k_len+2, sizeof(char));
if (!temp_keyword)
return -1;
strcat(temp_keyword, keyword);
strcat(temp_keyword, " ");

else if (keyword[0] != ' ' && keyword[k_len-1] == ' ')
temp_keyword = (char *)calloc(k_len+2, sizeof(char));
if (!temp_keyword)
return -1;
temp_keyword[0] = ' ';
strcat(temp_keyword, keyword);

else
/* If we get to here and no if statement has executed, keyword already has whitespaces
surrounding it */
temp_keyword = (char *)calloc(k_len+1, sizeof(char));
if (!temp_keyword)
return -1;
strcpy(temp_keyword, keyword);

ch_matches = found = 0;
k_len = strlen(temp_keyword); /* Calculate new string length */
for (i=0; i<b_len-k_len; i++)
ch_matches = 0;
for (j=0; j<k_len; j++)
if (buffer[i+j] == temp_keyword[j])
ch_matches++;
if (ch_matches == k_len)
found++;
i += k_len;




if (temp_keyword != NULL)
free(temp_keyword);
return found;
参考技术B vc++中有string类型,里面有查询函数。直接调用就行了。另外要加一个头文件:#include<string>,用标准名空间: using namespace std 参考技术C TCHAR tcStr[] = _T("feifei");

if (_tcschr(tcStr, _T('f') != NULL)
/* 找到 'f' */
else
/* 没找到 */本回答被提问者采纳
参考技术D CString str="feifei";
if (str.Find("f")!=-1)
cout<<"Found!"<<endl;
else cout<<"Not Found!"<<endl;

以上是关于在 VC++ 中如何查找字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在VC中输入字符串

VC++中CString里的find函数怎么使用

java中如何截取字符串?

如何在 VC6 监视窗口中获取变量的完整字符串值?

如何在 VC++/MFC 中的字符串中替换两个子字符串之间的字符串?

如何在 VC6 中查看 unicode CString 的值?