C++ 一个简单程序的编写

本人小白,编写一个函数,接收一个指向字符串的指针作为参数,返回字符串中重复字符的数目。例如在“Mississippi”中存在三个重复字符,不分大小写,重复次数大于等于2作为一次重复,只统计一次。如“mppp”只有一个重复字符。假定函数原型为:
int repeat(*ptr)
希望有大神能给予回答。

http://www.cnblogs.com/xh0102/p/5664234.html

https://wenku.baidu.com/view/06e4546f7e21af45b307a8ae.html

使用hash的一个比较弱的方案,如下:
#include

using namespace std;

int repeat(char *ptr);

int main()
{
char *pstr = "TESTaaTEST";
std::cout << repeat(pstr);
return 0;
}

/*

  • 字符串查重
  • 特别注意:本方法仅能完成A-Z、a-z区间内任意字符形成的字符串查重
    */
    int repeat(char *ptr)
    {
    int iRet = 0;
    if (!ptr)
    {
    return iRet;
    }

    int iAryStat[26] = {0};
    char *ptrTmp = ptr;
    int iTmp = -1;
    while (*ptrTmp != '\0')
    {
    if (*ptrTmp >=65 && *ptrTmp <= 90)
    {
    iTmp = *ptrTmp - 65;
    iAryStat[iTmp]++;
    ptrTmp++;
    continue;
    }
    if (*ptrTmp >= 97 && *ptrTmp <= 122)
    {
    iTmp = *ptrTmp - 97;
    iAryStat[iTmp]++;
    ptrTmp++;
    }
    }
    for (int i = 0; i < 26; i++)
    {
    if (iAryStat[i] > 1)
    {
    iRet++;
    }
    }

    return iRet;
    }


 int repeat(char *ptr)
{
    int hash[26]={0};//哈希表,每个元素表示对应字母出现的个数
    char *p=ptr;
    while(*p!='\0')
    {
        if(*p>='a') //这里只考虑了字符是大小写,没有考虑字符不是字母的情况
            hash[*p-'a']++;
        else hash[*p-'A']++;
        p++;
    }
    int count=0;
    for(int i = 0; i<26; i++)
    {
        if(hash[i]>1)   // 对应的字母出现个数大于一
            count++;
    }
    return count;
}