首页 > 试题广场 >

字符个数统计

[编程题]字符个数统计
  • 热度指数:505939 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。

数据范围:

输入描述:

输入一行没有空格的字符串。



输出描述:

输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。

示例1

输入

abc

输出

3
示例2

输入

aaa

输出

1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    char value[501] = {0};
    char array[128] = {0};
    int ValueLen = 0;
    int index = 0;
    int num = 0;
    scanf("%s", &value[0]);
    ValueLen = strlen(value);
    for(index = 0 ; index < ValueLen; index++)
    { 
       if(array[value[index]] == 0)
       {
            num++;
            array[value[index]] = 1;
       }
    }
    printf("%d\n",num);
    return 0;
}

发表于 2024-04-07 20:55:23 回复(0)
#include "stdio.h"
#include "string.h"、
//思路:首先判断str数组的元素是否在范围内,如果在,则将其值对应的existed的位置的元素设为1,最后统计existed里有多少个1.
int main()
{
    char str[500] = {0}, existed[500] = {2};
    scanf("%s", str);
    int i,length = strlen(str),a,count = 0,b;
    for (i = 0; i < length; i++) 
    {
        if (str[i] >= 0 && str[i] <= 127) 
        {
            existed[(int) str[i]] = 1;
        }
    }
    for(i = 0; i < 128;i++)
    {
        if (existed[i] == 1)
        {
            count++;
        }
    }
    printf("%d",count);
}

编辑于 2024-03-27 23:06:30 回复(0)
#include <stdio.h>
#include <string.h>
int main() {
    char n[500];
    char q[128]={0};
    int count=0;
    while (scanf("%s", n) != EOF) { 
        for(int i=0;i<strlen(n);i++)
        {
            if(q[(int)n[i]] != n[i])
            {
                q[(int)n[i]]=n[i];
                count++;
            }
        }
        printf("%d",count);
    }
    return 0;
}

编辑于 2024-02-17 20:18:32 回复(1)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int arr[1000] = { 0 };
    long long a = 0;
    long long count = 0;
    for (long long i = 0; i < 1000; i++)
    {
        scanf("%c", &arr[i]);
        if (arr[i] == '\n')
        {
            a = i;
            break;
        }
    }
    int arr1[127] = { 0 };
    for (long long i = 0; i < 128; i++)
    {
        arr1[i] = i;
    }
    for (long long i = 0; i < a; i++)
    {
        long long j = 0;
        for (j = 0; j <= 127; j++)
        {
            if (arr1[j] == arr[i])
            {
                count++;
                arr1[j] = 11;
            }
        }
    }
    printf("%d", count);
    return 0;
}
发表于 2024-01-11 11:17:21 回复(1)
#include <stdio.h>
#include <string.h>
//类似于哈希表的方法,引入一个数组用于标记这个字符是否出现过
int main()
{
    char str[501]={0};
    gets(str);
    int len=strlen(str);
    int array[128]={0};//引入一个数组用于标记这个字符是否出现过,题中要求ascii码0-127,所以有128个数,设置数组长度为128
    int result=0;//计数器
    for(int i=0;i<len;i++)//顺序遍历字符串
    {
        if(array[str[i]]==0)//如果这个字符没有出现过则将其数组对应下标的位置的数加一,同时将计数器加一
        {
            array[str[i]]++;
            result++;
        }
    }
    printf("%d",result);
    return 0;
}
发表于 2024-01-06 09:04:40 回复(0)
虽然很简单 还是掉了坑。。。
#include <stdio.h>
#include <string.h>


char InputString[500];
int CharNum[128] = {0}; 
int main() {
    scanf("%s",InputString);
    int VariNum = 0;
    for(int i = 0;i < strlen(InputString);i++)
    {
        int m = (int)InputString[i];
        char n = InputString[i];
        if((int)InputString[i] >= 0 &&((int)InputString[i] <= 127))
        {
            CharNum[(int)InputString[i]]  = 1;
        }
            
    }
    for(int i = 0;i<128;i++)
    {
        if(CharNum[i] == 1)
            VariNum++;
    }
    printf("%d",VariNum);
}


编辑于 2024-01-05 17:28:19 回复(0)
#include <stdio.h>

int main() {
    char a;
    int check[128] = {0};
    int k,sum;
    while (scanf(" %c", &a) != EOF) {
        k = (int)(a);
        check[k] = 1;
    }
    for (int i = 0; i < 128; i++) {
        if (check[i] == 1) {
            sum++;
        }
    }
    printf("%d\n", sum);
    return 0;
}

发表于 2023-12-23 16:54:45 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main() {
    char arr[501]={0};
    int c=0;
    fgets(arr, sizeof(arr), stdin);//输入字符串
    int len=strlen(arr);//计算长度,循环的次数
    for(int i=0;i<len;i++)
    {
        if((arr[i]>=0&&arr[i]<=127)&&(arr[i]!='\n'))//换行符号要排除
        {
            c++;//出现第一次
            for(int j=i+1;j<len;j++)
            {
                if(arr[j]==arr[i])
                {
                    c--;//第二次出现
                    break;//跳出小循环
                }
            }
        }
    }
    printf("%d",c);
    return 0;
}

发表于 2023-12-12 16:58:42 回复(0)
#include <stdio.h>
# include<string.h>
int main() {
    char s[501] = {'\0'};
    int ask[128] = {0},sum = 0;
    gets(s);
    for (int i = 0; s[i]!= '\0'; i++) ask[s[i]] = 1;
    int i = 0;
    while (i<128) sum += ask[i++];
    printf("%d",sum);

    return 0;
}

发表于 2023-12-01 22:34:55 回复(0)
1.问题类型
    去重,统计问题
2.思路
  (1)题目信息,提示输入的是ASCii码表范围0-127,并且忽略\n。这里也就提供了if判断的条件
(2)去重的话,由于数据量不多,最大也才需要127大小的数组,因此直接使用数组的index进行去重。
(3)使用数组的值去计数
发表于 2023-11-25 16:13:33 回复(0)
#include <stdio.h>

int main()
{
    int arr[128] = { 0 };
    int num = 0;
    char c;
    while ((c=getchar()) != '\n') {
        arr[c] = arr[c]+1;
        if (arr[c] == 1)
            num = num + 1;
    }
    printf("%d", num);
    return 0;
}
发表于 2023-10-15 11:07:12 回复(0)
#include <stdio.h>
#include <string.h>
int main() {
    char str[500], hash[127] = { NULL };
    int i, b, cnt = 0, k;
    scanf("%s", str);
    for (i = 0; i < strlen(str); i++) {
        k = str[i]/17+str[i] % 17;
        while (hash[k] != NULL && hash[k] != str[i]) {
            k++;
        }//线性探测再散列
        if (hash[k] != str[i]&&(str[i]>=0&&str[i]<=127)) {
            hash[k] = str[i];
            cnt++;
        }
    }
    printf("%d", cnt);
    return 0;
}

发表于 2023-09-14 16:13:24 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
int main()
{
	char arr[501] = { 0 };
	scanf("%s", arr);
	int sz = strlen(arr);
	int count = 0;
	int i = 0;
	int j = 0;
	for ( i = 0; i < sz; i++)
	{
        if ((arr[i] >= 0 && arr[i] <= 127) && (arr[i] != '\n'))
		count++;
		for ( j = i + 1; j < sz; j++)
		{
			if (arr[i] == arr[j])
			{
				count--;
                break;
			}
		}
		
	}
	printf("%d", count);
	return 0;
}
本人CSDN:Chris·Bosh_-CSDN博客
我也是代码学习者,感兴趣的可以关注博客
发表于 2023-08-12 16:56:43 回复(0)
/*将相同字符进行合并,数组长度减一,最后得出无重复字符的数组,判断其每个字符在(0~127)之间且非换行符,符合其长度即为无重复字符统计个数*/
#include <stdio.h>
#include<string.h>
int main() {
    char s[500];
    int len,i,j,k;
    scanf("%s",s);
    len=strlen(s);
    for(i=0;i<len;i++)
        for(j=i+1;j<len;j++)
        {
            if(s[i]==s[j]&&(s[i]>=0||s[i]<=127)&&s[i]!='\n')
            {
                for(k=j;k<len;k++)
                s[k]=s[k+1];
                len--;
                j--;
            }
        }
    printf("%d\n",len);
    return 0;
}
发表于 2023-07-28 01:23:35 回复(0)
#include <stdio.h>
#include <string.h>
int main() {
    int i,j,n;
    char str[500];
    scanf("%s",str);
    int str_len = strlen(str);

    for(i=1;i<str_len;i++){
        for(j=0;j<i;j++){
            if(str[j]==str[i])break;
        }
        if(i==j)n++;
    }
    printf("%d",n);
    return 0;
}
发表于 2023-07-17 22:03:23 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    char str[501];
    int buf[128]={0};
    int sum=0;
    while(scanf("%s",str)!=EOF){
        int len=strlen(str);
        for(int i=0;i<len;i++){
            int a=(int)str[i];
            buf[a]++;
            if(buf[a]==1){
                sum++;
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}
发表于 2023-05-15 15:31:38 回复(0)
强制类型转化,存入数组,计数
#include <stdio.h>

int main()
{
    int array[128]={0};
    char s;
    int a;
    while(scanf("%c",&s)!=EOF)
    {
        array[(int)s]=1;
    }
    int count=-1;
    for(int i=1;i<128;i++)
    {
        if(array[i]==1)
        {
            count++;
        }
    }
    printf("%d",count);
}

发表于 2023-04-12 13:46:46 回复(0)