鬼魅王子 发表于 2019-10-27 22:40

字符串数组问题

题目:将二进制转换为十进制
我的代码如下,但是运行一直错误,不知道错在哪里
顺便问一下strlen()是获取字符串长度是否会读取到‘\0’这个字符
#include <stdio.h>
#include <math.h>
int main()
{
      char a;
      int i,k,s=0;
      gets(a);
      k=strlen(a);
      for(i=0;i<=k;i++)
      {
                s+=a*pow(2,i);
               
      }
      printf("%d",s);
      return 0;
      
}

苏紫方璇 发表于 2019-10-27 22:51

循环换成这个,自行理解
        for (i = 0; i < k; i++)
        {
                s += (a-'0') * pow(2, i);

        }

苏紫方璇 发表于 2019-10-27 22:52

strlen是不加\0的长度

鬼魅王子 发表于 2019-10-27 23:06

本帖最后由 鬼魅王子 于 2019-10-27 23:08 编辑

苏紫方璇 发表于 2019-10-27 22:51
循环换成这个,自行理解
      for (i = 0; i < k; i++)
      {

emmm...
修改1.i<k是因为 strlen 是从1开始,所以K=3,假设为101;实际只需要循环3次而<=会循环4次.
2.a 假设为101 所以K=3,结果为a 也就是对应输入的最后一个数.
3.a-'0'   是因为我定义的是char 所以 对应的ascii码 所以要减去'0'的ascii码.
谢谢大佬解答...

鬼魅王子 发表于 2019-10-27 23:08

苏紫方璇 发表于 2019-10-27 22:52
strlen是不加\0的长度

顺便问一下:编译出现incompatible implicit declaration of built-in function 'strlen'
这个是什么问题,百度了没结果

苏紫方璇 发表于 2019-10-27 23:15

鬼魅王子 发表于 2019-10-27 23:08
顺便问一下:编译出现incompatible implicit declaration of built-in function 'strlen'
这个是什么问 ...

应该是缺个头文件 string.h

老伙计 发表于 2019-10-27 23:22

本帖最后由 老伙计 于 2019-10-27 23:30 编辑

#include <stdio.h>
#include <string.h>
int main(void)
{
      char a                                                               ;
      int k , m                                                               ;
      unsigned long long i , s                                                ;
      fgets(a , 100 , stdin)                                                    ;
      m = strlen(a) - 1                                                         ;
      a = '\0'                                                               ;
      for(s = 0 , i = 1 , k = m ; k ; i *= 2 , k --) if(a == '1') s += i ;
      printf("%I64u\n" , s)                                                   ;
}

鬼魅王子 发表于 2019-10-27 23:29

苏紫方璇 发表于 2019-10-27 23:15
应该是缺个头文件 string.h

头文件是有的

逍遥枷锁 发表于 2019-10-29 10:19

鬼魅王子 发表于 2019-10-27 23:29
头文件是有的

#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
        char a;
        int i, k, s = 0;
        gets_s(a);
        k = strlen(a);
        for (i = 0;i <= k;i++)
        {
                s += int(a * pow(2, i));//这里要不要强制转换自定数据类型

        }
        printf("%d", s);
        return 0;

}

鬼魅王子 发表于 2019-10-29 10:35

逍遥枷锁 发表于 2019-10-29 10:19
#include
#include
#include


强制转换会出错,这句要注意的是字符对应的ascii码
页: [1] 2
查看完整版本: 字符串数组问题