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个元素的对应位置,如果发现这个位置已经有数据了,就不需要再存了。