牛客网-华为在线编程-010-字符个数统计

xiaoxiao2021-02-28  89

题目描述

编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。

输入描述:

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

输出描述:

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

示例1

输入

abc

输出

3 解题思路一:利用点击打开链接中的字符串去重方法,输出去重后的size。

#include <iostream> #include <string> using namespace std; int main() { string s; int i = 0; cin>>s; int n = 0; n = s.size(); string str(s,n-1); for(i=n-1;i>=0;i--) { if(str.find(s[i]) == -1) { str = str+s[i]; } } cout<<str.size()<<endl; }解题思路二:遍历ASCII码(0~127),对比每个ASCII码是否存在于字符串中,如果存在,则计数count++。 #include <iostream> #include <string> using namespace std; int main() { string b; getline(cin,b); int count=0; for(int i=0;i<=127;i++) if(b.find(i)!=string::npos) count++; cout<<count; }说明:1)这里是遍历ASCII,不是字符串。2)b.find(i),其中i是ASSCII码,指向一个对应的字符。3)注意string.find() 搜索不到时的返回npos,这里没有使用-1而是使用的string::npos,更为严谨。 解题思路三:同样是打标签的方法,利用数组下标给每个输入的字符打标签,然后遍历ASCII码(0~127)进行对比计数。

#include <iostream> using namespace std; int main(){ char ch; int arr[128]={0}; int count=0; while(cin>>ch){ if(ch>=0 && ch<=127){ arr[ch]++; } } for(int i=0;i<128;i++){ if(arr[i]>0) count++; } cout<<count<<endl; return 0; }说明:1)char ch;while(cin>>ch),是每一次提取一个输入字符;string str;while(cin>>str),这里是读入字符串,注意 ”空格是cin的分隔符“,所以输入的字符串遇到空格就不继续存入str,空格后再次输入将会更新覆盖str的值,见 点击打开链接中的相关讨论;而getline(cin,str)是读取一整行字符串,不受空格影响。2)if(ch>=0 && ch<=127)是拿ch的ASCII码与(0~127)作比较。3)arr[ch]也是以字符的ASCII码作为数组的下标。 解题思路四:类似方法一。

链接:https://www.nowcoder.com/questionTerminal/eb94f6a5b2ba49c6ac72d40b5ce95f50 来源:牛客网 /*C++ 输入字符,ascii值在[0,127]时插入集合set中,输出set中的元素个数。*/ #include<iostream> #include<set> using namespace std; int main() {     char c;     set<char> s;     while(cin>>c){         if(c>=0 && c<=127){             s.insert(c);         }     }     cout << s.size() <<endl; } 注意:本题中用while(cin>>ch)实际上不是完全正确的,牛客网的测试用例存在bug,没有考虑空格的情况,严格来讲空格(space)属于ASCII码(0~127),ASCII码为032,所以使用getline(cin>>str)较好。

转载请注明原文地址: https://www.6miu.com/read-30601.html

最新回复(0)