吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1488|回复: 10
收起左侧

[求助] 字符串数组问题

[复制链接]
鬼魅王子 发表于 2019-10-27 22:40
题目:将二进制转换为十进制
我的代码如下,但是运行一直错误,不知道错在哪里
顺便问一下strlen()是获取字符串长度是否会读取到‘\0’这个字符
[C] 纯文本查看 复制代码
#include <stdio.h>
#include <math.h>
int main()
{
        char a[101];
        int i,k,s=0;
        gets(a);
        k=strlen(a);
        for(i=0;i<=k;i++)
        {
                s+=a[k-i]*pow(2,i);
                
        }
        printf("%d",s);
        return 0;
        
} 

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

苏紫方璇 发表于 2019-10-27 22:51
循环换成这个,自行理解
[C++] 纯文本查看 复制代码
	for (i = 0; i < k; i++)
	{
		s += (a[k - i - 1]-'0') * pow(2, i);

	}

苏紫方璇 发表于 2019-10-27 22:52
 楼主| 鬼魅王子 发表于 2019-10-27 23:06
本帖最后由 鬼魅王子 于 2019-10-27 23:08 编辑
苏紫方璇 发表于 2019-10-27 22:51
循环换成这个,自行理解
[mw_shl_code=cpp,true]        for (i = 0; i < k; i++)
        {

emmm...
修改1.i<k是因为 strlen 是从1开始,所以K=3,假设为101;实际只需要循环3次而<=会循环4次.
2.a[k-i-1] 假设为101 所以K=3,结果为a[2] 也就是对应输入的最后一个数.
3.a[k-i-1]-'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'
这个是什么问题,百度了没结果

点评

应该是缺个头文件 string.h  详情 回复 发表于 2019-10-27 23:15
苏紫方璇 发表于 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[101]                                                               ;
        int k , m                                                                 ;
        unsigned long long i , s                                                  ;
        fgets(a , 100 , stdin)                                                    ;
        m = strlen(a) - 1                                                         ;
        a[m] = '\0'                                                               ;
        for(s = 0 , i = 1 , k = m ; k ; i *= 2 , k --) if(a[k - 1] == '1') s += i ;
        printf("%I64u\n" , s)                                                     ;
}
 楼主| 鬼魅王子 发表于 2019-10-27 23:29
苏紫方璇 发表于 2019-10-27 23:15
应该是缺个头文件 string.h

头文件是有的
逍遥枷锁 发表于 2019-10-29 10:19

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

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

}
 楼主| 鬼魅王子 发表于 2019-10-29 10:35
逍遥枷锁 发表于 2019-10-29 10:19
#include
#include
#include

强制转换会出错,这句要注意的是字符对应的ascii码
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 00:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表