删除字符串中出现次数最小的字符及书写字符串函数时的一个注意点
2016-12-02 09:06
495 查看
void delete_least_num_char(char *src) //函数形参字符指针函数形参是字符串首地址
{
int i;
int j = 0;
int min_num;
int temp;
char *temp1 = src;
int charcount[26] = {0};
char min_num_char[26];
while(*src != '\0') //遍历字符串,计数26个英文字母在字
{ //符串中出现的次数
switch(*src)
{
case 'a':charcount['a' - 'a']++;break;
case 'b':charcount['b' - 'a']++;break;
case 'c':charcount['c' - 'a']++;break;
case 'd':charcount['d' - 'd']++;break;
case 'e':charcount['e' - 'a']++;break;
case 'f':charcount['f' - 'a']++;break;
case 'g':charcount['g' - 'a']++;break;
case 'h':charcount['h' - 'a']++;break;
case 'i':charcount['i' - 'a']++;break;
case 'j':charcount['j' - 'a']++;break;
case 'k':charcount['k' - 'a']++;break;
case 'l':charcount['l' - 'a']++;break;
case 'm':charcount['m' - 'a']++;break;
case 'n':charcount['n' - 'a']++;break;
case 'o':charcount['o' - 'a']++;break;
case 'p':charcount['p' - 'a']++;break;
case 'q':charcount['q' - 'a']++;break;
case 'r':charcount['r' - 'a']++;break;
case 's':charcount['s' - 'a']++;break;
case 't':charcount['t' - 'a']++;break;
case 'u':charcount['u' - 'a']++;break;
case 'v':charcount['v' - 'a']++;break;
case 'w':charcount['w' - 'a']++;break;
case 'x':charcount['x' - 'a']++;break;
case 'y':charcount['y' - 'a']++;break;
case 'z':charcount['z' - 'a']++;break;
}
src++;
}
for(i = 0;i < 26;i++)
{
if(charcount[i] != 0)
{
min_num = charcount[i];
break;
}
}
for(i = 0;i < 26;i++) //结合上一个for循环,确定字符串中出现最小次数字符的个数
{
if(charcount[i] != 0)
{
if(min_num > charcount[i])
{
min_num = charcount[i];
}
}
}
for(i = 0;i < 26;i++) //将出现最小次数的字符都放在一个字符数组min_num_char[26]中
{
if(charcount[i] == min_num)
{
min_num_char[j] = 'a' + i;
j++;
}
}
min_num_char[j] = '\0';
temp = j;
src = temp1;
for(i = 0;i < temp;i++) //遍历字符串,输出字符串中出现次数最少的字符
{
while(*src != '\0')
{
if(min_num_char[i] == *src)
{
delete_one_char(src); //删除一个字符串,即字符整体往前移一下
//这个是调用的自己写的一个子文件
}
else
{
src++;
}
}
src = temp1;
}
注意点:当两次遍历字符串的时候,第一次遍历完以后,这时候指向的地址是字符串结束符的位置,第二次再遍历的时候,要注意把指针再指向字符串首元素的地址。
{
int i;
int j = 0;
int min_num;
int temp;
char *temp1 = src;
int charcount[26] = {0};
char min_num_char[26];
while(*src != '\0') //遍历字符串,计数26个英文字母在字
{ //符串中出现的次数
switch(*src)
{
case 'a':charcount['a' - 'a']++;break;
case 'b':charcount['b' - 'a']++;break;
case 'c':charcount['c' - 'a']++;break;
case 'd':charcount['d' - 'd']++;break;
case 'e':charcount['e' - 'a']++;break;
case 'f':charcount['f' - 'a']++;break;
case 'g':charcount['g' - 'a']++;break;
case 'h':charcount['h' - 'a']++;break;
case 'i':charcount['i' - 'a']++;break;
case 'j':charcount['j' - 'a']++;break;
case 'k':charcount['k' - 'a']++;break;
case 'l':charcount['l' - 'a']++;break;
case 'm':charcount['m' - 'a']++;break;
case 'n':charcount['n' - 'a']++;break;
case 'o':charcount['o' - 'a']++;break;
case 'p':charcount['p' - 'a']++;break;
case 'q':charcount['q' - 'a']++;break;
case 'r':charcount['r' - 'a']++;break;
case 's':charcount['s' - 'a']++;break;
case 't':charcount['t' - 'a']++;break;
case 'u':charcount['u' - 'a']++;break;
case 'v':charcount['v' - 'a']++;break;
case 'w':charcount['w' - 'a']++;break;
case 'x':charcount['x' - 'a']++;break;
case 'y':charcount['y' - 'a']++;break;
case 'z':charcount['z' - 'a']++;break;
}
src++;
}
for(i = 0;i < 26;i++)
{
if(charcount[i] != 0)
{
min_num = charcount[i];
break;
}
}
for(i = 0;i < 26;i++) //结合上一个for循环,确定字符串中出现最小次数字符的个数
{
if(charcount[i] != 0)
{
if(min_num > charcount[i])
{
min_num = charcount[i];
}
}
}
for(i = 0;i < 26;i++) //将出现最小次数的字符都放在一个字符数组min_num_char[26]中
{
if(charcount[i] == min_num)
{
min_num_char[j] = 'a' + i;
j++;
}
}
min_num_char[j] = '\0';
temp = j;
src = temp1;
for(i = 0;i < temp;i++) //遍历字符串,输出字符串中出现次数最少的字符
{
while(*src != '\0')
{
if(min_num_char[i] == *src)
{
delete_one_char(src); //删除一个字符串,即字符整体往前移一下
//这个是调用的自己写的一个子文件
}
else
{
src++;
}
}
src = temp1;
}
注意点:当两次遍历字符串的时候,第一次遍历完以后,这时候指向的地址是字符串结束符的位置,第二次再遍历的时候,要注意把指针再指向字符串首元素的地址。
相关文章推荐
- 删除一个字符串中出现次数最少的字符
- 华为2013校园招聘机试题目题4:删除一个字符串中出现次数最少的字符
- 编写一个函数,删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。
- 删除一个字符串中出现次数最少的字符
- 删除一个字符串中出现次数最少的字符
- 【华为OJ】删除一个字符串中出现次数最少的字符
- 华为2013校园招聘上机笔试题-删除一个字符串中出现次数最少的字符
- 神州数码:输入一个字符串: (1)输出出现次数最少的字符 (2)删除出现 4000 次数最少的字符并输出字符串
- 函数、数组区别以及函数注意点和回调函数,以及删除字符串中出现次数最少的字符的程序
- 华为机试——删除一个字符串中出现次数最少的字符
- 【C编程练习】华为2013校园招聘机试题目题4:删除一个字符串中出现次数最少的字符,函数原型为:char * delChar(char *s,int iLen)
- 删除一个字符串中出现次数最少的字符
- 在一个字符串中删除指定的字符 & 删除字符串中所有出现在另一个字符数组中的字符
- 查找一个字符串里,出现次数最多的字符,时间复杂度O(n)
- 给定一个字符串,统计一下哪个字符出现次数最大
- 一个字符在字符串中出现的次数
- 输入一个字符串 打印出每个字符出现的次数
- 黑马程序员之C#学习笔记:求一个字符串中各个字符出现的次数
- 将一个字符串中出现次数最多的字符找出来
- javascript判断一个字符串中出现次数最多的字符,统计这个次数