求字符串中出现频次最高的字符

题目给出的函数原型如下:

char getMostCharFromString(const char *str);

具体要求为,若有多个相同的字符备选,返回其中最早出现的字符,比如字符串”wwwwwwdddaaabbbdddcccc”,w和d都出现过6次,但只返回第一个最早出现的w。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char getMostCharFromString(const char* str);

int main(int argc, char* argv[])
{
	char *pBuf = "wwwwwwdddaaabbbdddcccc";
	printf("出现最多的字符:%c\n", getMostCharFromString(pBuf));
	system("pause");
	return 0;
}

char getMostCharFromString(const char* str)
{
	// 计算字符总数
	int nCount = 0;
	const char* strBak = str;
	while (*strBak++) nCount++;
	
	// 临时记录出现最多那个字符的总数
	int flagCount = 0;
	// 用于在循环中记录每一个出现的次数,用来和flagCount对比
	int flagTmp = 0;
	// 用来记录出现最多那个字符的下标
	int flag = 0;

	// 两套循环,分别把每个字符从头遍历到尾
	for (int i = 0; i < nCount - 1; i++)
	{
		for (int j = 0; j < nCount - 1; j++)
		{
			// 如果出现相同字符,那么对把flagTmp++
			if (str[i] == str[j])
				flagTmp++;
		}
		// 内循环结束后,判断flagTmp是否大于flagCount
		if (flagTmp > flagCount)
		{
			// 如果大于,则记录下标
			flag = i;
			// 并把最大值赋给flagCount
			flagCount = flagTmp;
		}
		// flagTmp置为0,以便下次循环
		flagTmp = 0;
	}
	// 返回最终的结果
	return str[flag];
}

评论