C语言练习第七天

字符个数统计

https://www.nowcoder.com/practice/eb94f6a5b2ba49c6ac72d40b5ce95f50?tpId=37&tqId=21233&tPage=1&rp=&ru=/ta/huawei&qru=/ta/huawei/question-ranking

题目描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。

输入描述:
输入N个字符,字符在ACSII码范围内。

输出描述:
输出范围在(0~127)字符的个数。

示例1
输入
复制
abc
输出
复制
3

注意审题:
1.范围在0-127;
2.字符的个数,一位着重复的值需要删掉。

include <string.h>

include <stdio.h>

int main(void)
{
char str[1000] = { 0 };

//while (scanf("%s", str) != EOF)
{
    int n = 0;
    char back[128] = { 0 };
    fgets(str, 1000, stdin);
    //gets_s(str, n);
    //scanf("%s", str);
    int num;
    int count = 0;
    n = strlen(str)-1;

    for (int i = 0;i < n;i++)
    {
        /*if (((str[i] + 0) > 0) && ((str[i] + 0) < 127) && ('\n' != str[i]))
        {
            for (int j = i+1;j < n;j++)
            {
                if ((int)str[i] == (int)str[j])
                {
                    for (int k = j;k < n-1;k++)
                    {
                        str[k] = str[k + 1];
                    }
                    j--;
                    n--;
                }
            }
        }*/
        num = (int)str[i];
        //printf("i:%d,num:%d", i, num);
        if ((0 > num)||(127<num))
        {
            break;
        }
        if ((0 == back[num]) && (10 != back[num]))
        {
            back[num] = num;
            count++;
        }
    }

    printf("%d", count);
}
return 0;

}

上述两种写法均可以通过,但是我觉得网友的写法更好,即构建一个127个char型的数组,然后把对应的字符存在127个元素的对应位置,如果发现这个位置已经有数据了,就不需要再存了。

全部评论

相关推荐

浪子陪都:简历最优秀的地方放到了后面,国奖,校级奖学金这些是最亮眼的。说明你跟同级别的学生不一样。 建议台灯这个,PCB布局布线这个词汇不专业,业内是PCB Layout,第二,单片机的板子一般不用考虑SI,PI 都是低速信号,只要遵循3W原则就好了。 单片机的项目太low了,技能这块,你要看一下BOSS直聘的招聘要求,按照别人的要求写,一些关键词可以增加你简历被检索到的概率。 主修课程不用写,这个没有人去关注的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务