int fun(char *str)
字符在acs2码范围内(0~127)不在范围内不统计
例如:传入 abcd 返回 4
传入 aabb返回2
传入aabbcc返回3
13 个解决方案
#1
c++可以用map
c的话,直接开辟一个布尔型数组,长度128,对应0~127字符,初始化为false。对输入的字符串进行遍历,将出现的字符对应的数组元素标记为true。在对数组遍历,统计true的个数,不就行了
c的话,直接开辟一个布尔型数组,长度128,对应0~127字符,初始化为false。对输入的字符串进行遍历,将出现的字符对应的数组元素标记为true。在对数组遍历,统计true的个数,不就行了
#2
arr[ str[ i ] ] = 1
#3
int fun(const char *str)
{
int ct[128]={0};
int ret =0;
for(;*str;++str){
ret +=(*str>=0 &&++ct[*str++]==1);
}
return ret;
}
#4
set 就行了。最后 size 一下。
#5
这是明显的位图算法
#6
一个笨的算法可以考虑,建一个数组arr[]用于存储不同的字符,和int count 统计不同的个数;然后依次读取字符串str中每个字符在arr[]中遍历查找,如果arr[]中不存在,把该字符存入arr[]中,count+1 直到遍历完str
#7
你写错了
循环体里面的 *str++ 不用++
循环体里面的 *str++ 不用++
#8
int ct[128]={0};
int ret = 0;
while(*str)
ret += ct[ *str++ ]++ == 0;
return ret;
#9
是这样么
int get_strNum(char *str)
{
bool b_num[128];
for(int i = 0; i < 128; i++)
{
b_num[i] = false;
}
int a = 0;
while(*str != '\0')
{
if(*str < 0 || *str > 128)
{
continue;
}
int temp = *str;
b_num[temp] = true;
str++;
}
for(int i = 0; i < 128; i++)
{
if(b_num[i] == true)
{
a++;
}
}
return a;
}
int main()
{
char *str = "AAbbAAaacddcfffccrtttttttttttttttttttttttttttttttttttttttttt";
int a = fun(str);
printf("%d", a);
return 0;
}
#10
int get_strNum(char *str)
{
bool b_num[128];
for(int i = 0; i < 128; i++)
{
b_num[i] = false;
}
int a = 0;
while(*str != '\0')
{
if(*str < 0 || *str > 128)
{
continue;
}
int temp = *str;
b_num[temp] = true;
str++;
}
for(int i = 0; i < 128; i++)
{
if(b_num[i] == true)
{
a++;
}
}
return a;
}
int main()
{
char *str = "AAbbAAaacddcfffccrtttttttttttttttttttttttttttttttttttttttttt";
int a = get_strNum(str);
printf("%d", a);
return 0;
}
#11
看不懂,能分步骤写吗?
#12
对
#13
把最终的代码写出来结贴
感谢1楼2楼,他们的方法很对
感谢1楼2楼,他们的方法很对
int get_strNum(char *str)
{
bool b_num[128];
for(int i = 0; i < 128; i++)
{
b_num[i] = false;
}
int a = 0;
while(*str != '\0')
{
if(*str < 0 || *str > 128)
{
str++;
continue;
}
int temp = *str;
b_num[temp] = true;
str++;
}
for(int i = 0; i < 128; i++)
{
if(b_num[i] == true)
{
a++;
}
}
return a;
}
int main()
{
char *str = "AAbbAAaacddcfffccrtttttttttttttttttttttttttttttttttttttttttt";
int a = get_strNum(str);
printf("%d", a);
return 0;
}
#1
c++可以用map
c的话,直接开辟一个布尔型数组,长度128,对应0~127字符,初始化为false。对输入的字符串进行遍历,将出现的字符对应的数组元素标记为true。在对数组遍历,统计true的个数,不就行了
c的话,直接开辟一个布尔型数组,长度128,对应0~127字符,初始化为false。对输入的字符串进行遍历,将出现的字符对应的数组元素标记为true。在对数组遍历,统计true的个数,不就行了
#2
arr[ str[ i ] ] = 1
#3
int fun(const char *str)
{
int ct[128]={0};
int ret =0;
for(;*str;++str){
ret +=(*str>=0 &&++ct[*str++]==1);
}
return ret;
}
#4
c++可以用map
c的话,直接开辟一个布尔型数组,长度128,对应0~127字符,初始化为false。对输入的字符串进行遍历,将出现的字符对应的数组元素标记为true。在对数组遍历,统计true的个数,不就行了
set 就行了。最后 size 一下。
#5
这是明显的位图算法
#6
一个笨的算法可以考虑,建一个数组arr[]用于存储不同的字符,和int count 统计不同的个数;然后依次读取字符串str中每个字符在arr[]中遍历查找,如果arr[]中不存在,把该字符存入arr[]中,count+1 直到遍历完str
#7
int fun(const char *str)
{
int ct[128]={0};
int ret =0;
for(;*str;++str){
ret +=(*str>=0 &&++ct[*str++]==1);
}
return ret;
}
循环体里面的 *str++ 不用++
#8
int ct[128]={0};
int ret = 0;
while(*str)
ret += ct[ *str++ ]++ == 0;
return ret;
#9
c++可以用map
c的话,直接开辟一个布尔型数组,长度128,对应0~127字符,初始化为false。对输入的字符串进行遍历,将出现的字符对应的数组元素标记为true。在对数组遍历,统计true的个数,不就行了
是这样么
int get_strNum(char *str)
{
bool b_num[128];
for(int i = 0; i < 128; i++)
{
b_num[i] = false;
}
int a = 0;
while(*str != '\0')
{
if(*str < 0 || *str > 128)
{
continue;
}
int temp = *str;
b_num[temp] = true;
str++;
}
for(int i = 0; i < 128; i++)
{
if(b_num[i] == true)
{
a++;
}
}
return a;
}
int main()
{
char *str = "AAbbAAaacddcfffccrtttttttttttttttttttttttttttttttttttttttttt";
int a = fun(str);
printf("%d", a);
return 0;
}
#10
c++可以用map
c的话,直接开辟一个布尔型数组,长度128,对应0~127字符,初始化为false。对输入的字符串进行遍历,将出现的字符对应的数组元素标记为true。在对数组遍历,统计true的个数,不就行了
int get_strNum(char *str)
{
bool b_num[128];
for(int i = 0; i < 128; i++)
{
b_num[i] = false;
}
int a = 0;
while(*str != '\0')
{
if(*str < 0 || *str > 128)
{
continue;
}
int temp = *str;
b_num[temp] = true;
str++;
}
for(int i = 0; i < 128; i++)
{
if(b_num[i] == true)
{
a++;
}
}
return a;
}
int main()
{
char *str = "AAbbAAaacddcfffccrtttttttttttttttttttttttttttttttttttttttttt";
int a = get_strNum(str);
printf("%d", a);
return 0;
}
#11
int ct[128]={0};
int ret = 0;
while(*str)
ret += ct[ *str++ ]++ == 0;
return ret;
看不懂,能分步骤写吗?
#12
c++可以用map
c的话,直接开辟一个布尔型数组,长度128,对应0~127字符,初始化为false。对输入的字符串进行遍历,将出现的字符对应的数组元素标记为true。在对数组遍历,统计true的个数,不就行了
int get_strNum(char *str)
{
bool b_num[128];
for(int i = 0; i < 128; i++)
{
b_num[i] = false;
}
int a = 0;
while(*str != '\0')
{
if(*str < 0 || *str > 128)
{
continue;
}
int temp = *str;
b_num[temp] = true;
str++;
}
for(int i = 0; i < 128; i++)
{
if(b_num[i] == true)
{
a++;
}
}
return a;
}
int main()
{
char *str = "AAbbAAaacddcfffccrtttttttttttttttttttttttttttttttttttttttttt";
int a = get_strNum(str);
printf("%d", a);
return 0;
}
对
#13
把最终的代码写出来结贴
感谢1楼2楼,他们的方法很对
感谢1楼2楼,他们的方法很对
int get_strNum(char *str)
{
bool b_num[128];
for(int i = 0; i < 128; i++)
{
b_num[i] = false;
}
int a = 0;
while(*str != '\0')
{
if(*str < 0 || *str > 128)
{
str++;
continue;
}
int temp = *str;
b_num[temp] = true;
str++;
}
for(int i = 0; i < 128; i++)
{
if(b_num[i] == true)
{
a++;
}
}
return a;
}
int main()
{
char *str = "AAbbAAaacddcfffccrtttttttttttttttttttttttttttttttttttttttttt";
int a = get_strNum(str);
printf("%d", a);
return 0;
}