输入一串只包含大小写的字符串,找出其中只出现一次的字符并输出。
Input: aabcdeeff
Output: bcd
不论字母是出现一次、还是多次都可以用该方法计算。
Input: aabcdeeff
Output: bcd
实现思路:声明一个数组,每个数组元素对应一个字母,元素的值存放该字母出现的次数,最后遍历这个数组找出值为1的元素,也就找到了对应的字母。
/*从A到z*/
#define input_RANGE ('z' - 'A' + 1)
int count_letter(char *input, char *output)
{
int i = 0;
int temp[input_RANGE + 1] = {'\0'};
if ((NULL == input) || (NULL == output)) {
return -1;
}
while(*(input + i) != '\0') {
/*不是大小写自己立即返回*/
if (((*(input + i) < 'A') || (*(input + i) > 'Z')) &&
((*(input + i) < 'a') || (*(input + i) > 'z'))) {
return -1;
}
/*数组每一个元素对应'A'到'z',当出现一个字母就在其对应的位置加1计数*/
temp[*(input + i) - 'A'] += 1;
i++;
}
/*遍历数组,元素为1的位置就是只出现了一次的字母*/
for(i = 0; i < input_RANGE; i++) {
if (1 == temp[i]) {
sprintf(output, "%c", 'A' + i);
output++;
}
}
*output = '\0';
return 0;
}
不论字母是出现一次、还是多次都可以用该方法计算。