有一个文件里面有中文有英文
我想在此文件中查找某一个字符串的个数CFile  file(TRUE, "test.txt");然后该怎么做~~~~???

解决方案 »

  1.   

    假设需要查找的字符串为 szNeedFind
    int nlen = strlen(szNeedFind);
    FILE* fp = fopen("test.txt", "r");
    char szBuffer[256]; char ch; int iCount = 0;
    strcpy(szBuffer, "");
    while(!feof(fp))
    {
       if( fread(fp, 1, 1, &ch) != 1) break;
      else
      {
         memmove(szBuffer, szBuffer+1, nlen-1);
         strcat(szBuffer, &ch);
         if( strcmp(szBuffer, szNeedFind) == 0 )
          iCount ++;
       }
    }
    fclose(fp);
      

  2.   

    用CString 的 .Find  做个标志 位
      

  3.   

    to:   biliangxia(天下无双)如果文件比较大,你每次只能从256个字符中查找。如果这个256个字符的最后几个字符正好是我要查找的字符的前几位。这样,查询出来的结果就会少于实际结果。
      

  4.   

    把文件映射一下,当成内存用CreateFileMapping(
      HANDLE hFile,
      LPSECURITY_ATTRIBUTES lpAttributes,
      DWORD flProtect,
      DWORD dwMaximumSizeHigh,
      DWORD dwMaximumSizeLow,
      LPCTSTR lpName
    );LPVOID MapViewOfFile(
      HANDLE hFileMappingObject,
      DWORD dwDesiredAccess,
      DWORD dwFileOffsetHigh,
      DWORD dwFileOffsetLow,
      SIZE_T dwNumberOfBytesToMap
    );
      

  5.   

    把文件读给一个CString,然后用CString的find很容易啊。
    CString fileStr,findStr;
    .....//读文件到fileStr,给findStr赋值
    int i=0,count=0;
    while(( i=fileStr.Find(findStr,i)) > 0)
        count++;
    但是有个问题,如果你要找的那个字符串正好处在2行的话,比如:
    文件:
    dfsfus9fj342ab
    cjisjfisabc
    要找的字符串:abc
    这时候查找结果是1,因为有一个abc在第一行尾和第二行初,中间实际有一个回车,所以查不到。如果你只处理字符串的话,就先删除点fileStr里面的所有回车,然后再找
      

  6.   


    int findstrcount(CString, filename, CString findstr)
    {
        CString strfile;

        CFile fp;
        CFileException fe;

        // 打开文件
        if (!fp.Open(filename, CFile::modeRead, &fe))
        {
            AfxMessageBox("打开文件失败!");
            return FALSE;
        }    // 将文件读入到strfile
        long dwLength = 0;
        dwLength = fp.GetLength();    TCHAR *pBuf = new TCHAR[dwLength];
        memset(pBuf, 0, sizeof(TCHAR) * dwLength);
        UINT nBytesRead = fp.Read(pBuf, dwLength);
        strfile = pBuf;
        fp.Close();
        delete [] pBuf;    strfile = strfile.Left(dwLength);    // 查找字符串 findstr
        int pos = 0, 
        int pos1;
        int count = 0;
        while ((pos1=strfile.Find(findstr, pos)) != -1)
        {
            // 找到一个, 计数加1
            count++;
            pos = pos1 + findstr.GetLength();
        }    return count;
    }
      

  7.   

    作文件影射,然后用字符串的查找匹配函数
    如果单纯只是txt查找,那么可以用系统的findstr命令,然后用管道获得输出
      

  8.   

    谢谢各位。
    我就是每次读1K到CString里。
    然后在这个刚读入的CString里Find。
    可是得出来的结果跟实际结果不一样。因为有的字符串正好处于1K的边缘。junhuang09() 给的最正确。