题目:
代码:
#include
#include
#include
bool digitCount(char * num);
int main(){
int a;
char * num;
scanf("num = ""%c""",num);
a = digitCount(* num);
if(a == 1)
printf("true\n");
else if(a ==0)
printf("flase\n");
return 0;
}
#include
bool digitCount(char * num){
int m=0,i,n,j;
n = strlen(num);
int s[n];
for(i=0;ifor(j=0;jif(num[j]==i)
m++;
}
s[i]=m;
}
if(strcmp(s,num)==0)
return 1;
if(strcmp(s,num)!=0)
return 0;
}
Output:
bool型的取值是true和false
你的程序存在问题:
1.在读取num字符串时,scanf("num = ""%c""",num);的语法有误,应该是scanf("%s",num);
2.在定义s数组时,没有清零。
3.在循环中m没有清零。
4.if(num[j]==i)这句话语法有误,num[j]是字符,i是数字,应该改成if(num[j]=='i')或if(num[j]-'0'==i)
strcmp(s,num) 比较的是数字数组s 和字符串num ,应该比较的是s[i]和num[i]
代码返回值应该是bool类型
纠正后代码:
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool digitCount(char * num);
int main(){
char * num;
scanf("%s",num);
bool a = digitCount(num);
if(a == 1)
printf("true\n");
else if(a ==0)
printf("flase\n");
return 0;
}
bool digitCount(char * num){
int i,j,n;
n = strlen(num);
int s[10] = {0};
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(num[j]-'0'==i)
s[i]++;
}
}
for(i=0;i<n;i++){
if(s[num[i]-'0']!=num[i]-'0'){
return false;
}
}
return true;
}
请注意,这是一个示例代码。如果你有其他需求或有其他问题需要解决,请在提问时更详细地描述你的需求或问题。如果有需要,还需要对这段代码进行更多测试和优化。
改成这样:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
bool digitCount(char * num);
int main(){
char num[100];
scanf("num=%s",num);
printf("input data is %s \n",num);
bool a = digitCount(num);
if(a == 1)
printf("result: true\n");
else if(a ==0)
printf("result: flase\n");
return 0;
}
bool digitCount(char * num){
int i,n,j;
n = strlen(num);
cout<<"data length= "<<n<<endl;
char s[n];
for(i=0;i<n;i++){
int m=0;
for(j=0;j<n;j++){
if(num[j]==(char)('0'+i))
{
m++;
}
}
s[i]=(char)('0'+m);
cout<<s[i]<<"=="<<num[i]<<" ?"<<endl;
}
if(strncmp(s,num,n)==0)
return true;
if(strncmp(s,num,n)!=0)
return false;
return true;
}