第二种方法(使用整形数组)的效率很高吧,推荐使用!
//奇偶排序
void Odd_EvenSort(int data[], int size)
{
//
}
//找出字符串中第一个不重复的字符
int FindFirstNotRepeat(const char *pStr/* = NULL*/, int nSize/* = -1*/)
{
//若为空字符串就退出
if (NULL == pStr)
{
return -1;
}
//若字符串长度参数为-1,以'\0'表示字符串结尾,重新计算长度
if (-1 == nSize)
{
nSize = (int)strlen(pStr);
}
//设置字符在字符串中的位置索引
int nIndex = 0;
//一个标志,true表示未重复,false表示重复
bool bFlag;
//循环查找符合要求的字符
for (int i = 0; i < nSize; i++)
{
nIndex = i;
bFlag = true;
for (int j = 0; j < nSize; j++)
{
//下标相等表示是同一个数,直接进行下一个字符的比较
if (i == j)
{
continue;
}
//如果相等,则说明字符重复
if (pStr[i] == pStr[j])
{
bFlag = false;
break;
}
}
//如果标志一直是不重复就找到符合要求的字符
if (bFlag)
{
break;
}
}
//如果找不到符合要求的字符,返回-1
if (bFlag == false)
{
nIndex = -1;
}
return nIndex;
}
//找出字符串中最后一个重复的字符
int FindLastRepeat(const char *pStr/* = NULL*/, int nSize/* = -1*/)
{
//若为空字符串就退出
if (NULL == pStr)
{
return -1;
}
//若字符串长度参数为-1,以'\0'表示字符串结尾,重新计算长度
if (-1 == nSize)
{
nSize = (int)strlen(pStr);
}
//循环查找符合要求的字符
for (int i = nSize - 1; i >= 0; i--)
{
for (int j = 0; j < i; j++)
{
if (pStr[i] == pStr[j])
{
return i;
}
}
}
return -1;
}
//找出字符串中第一个不重复的字符
int FirstNoRepeat(const char *pStr/* = NULL*/, int nSize/* = -1*/)
{
//若为空字符串就退出
if (NULL == pStr)
{
return -1;
}
//若字符串长度参数为-1,以'\0'表示字符串结尾,重新计算长度
if (-1 == nSize)
{
nSize = (int)strlen(pStr);
}
//因为只有128个字符,所以可以申请整形数组,目的是存取每个字母出现的次数
int nArr[128] = {0};
//记录每个字符出现的次数
for (int i = 0; i < nSize; i++)
{
int n = (int)pStr[i];
nArr[n]++;
}
//寻找符合要求的字符的索引
for (int i = 0; i < nSize; i++)
{
int n = (int)pStr[i];
if (1 == nArr[n])
{
return i;
}
}
return -1;
}
//找出字符串中第一个不重复的字符
int LastRepeat(const char *pStr/* = NULL*/, int nSize/* = -1*/)
{
//若为空字符串就退出
if (NULL == pStr)
{
return -1;
}
//若字符串长度参数为-1,以'\0'表示字符串结尾,重新计算长度
if (-1 == nSize)
{
nSize = (int)strlen(pStr);
}
//因为只有128个字符,所以可以申请整形数组,目的是存取每个字母出现的次数
int nArr[128] = {0};
//记录每个字符出现的次数
for (int i = 0; i < nSize; i++)
{
int n = (int)pStr[i];
nArr[n]++;
}
//寻找符合要求的字符的索引
for (int i = nSize; i >= 0; i--)
{
int n = (int)pStr[i];
if (1 < nArr[n])
{
return i;
}
}
return -1;
}