第一次与sscanf亲密接触 HDU 2106

本文探讨了进制转换的算法实现,并通过样例输入展示了如何使用`sscanf`函数优雅地进行操作。重点在于理解不同进制表示的数值如何相加并输出总和。

Sample Input

3 1(2) 2(3) 3(4) 4 11(10) 11(2) 11(3) 11(4)


 

Sample Output
6 23

 

题目大意&&思路:进制转换的水题,括号内是说明括号前的数是几进制表示的,最后输出他们的和;

sscanf很优雅很喜欢,虽然更强大的还有正则表达式,但是用她在比赛中应该已经收效不少~~大爱~~

AC program:

#include<iostream>
using namespace std;
int main()
{
char from[50]; 
int to; 
int n; 
while(cin>>n)
{ 
      char tmp[50];
      int sum=0; 
      for(int i=0;i<n;i++)
      {
          cin>>tmp; 
          sscanf(tmp,"%[^(](%d%[^)]",from,&to);
          //printf("%s   %d\n", from,to); 
          int len=strlen(from); 
          int base=1; 
          for(int i=len-1;i>=0;i--)
           {
              sum+=(from[i]-'0')*base;
             base*=to;       
            } 
      }
      cout<<sum<<endl; 
} 
//system("pause"); 
return 0;} 


 

### MFC中 `sscanf_s` 函数的第一个参数类型 在 MFC 或标准 C 库中,`sscanf_s` 是一个安全版本的字符串格式化输入函数。其第一个参数是一个指向源字符串的常量字符指针 (`const char*`)。此参数表示需要被解析的字符串内容。 以下是关于 `sscanf_s` 的具体说明: #### 函数原型 ```c int sscanf_s(const char *src, const char *format, ...); ``` - **`src`**: 这是 `sscanf_s` 的第一个参数,类型为 `const char*`,它指向待解析的字符串[^2]。 - **`format`**: 格式控制字符串,指定如何解释输入数据。 - 后续参数则是根据格式字符串的要求提供的一系列目标变量地址。 #### 安全特性 传统的 `sscanf` 不同,`sscanf_s` 提供了额外的安全保障机制。对于某些特定的数据类型(如字符串),需要显式指定缓冲区大小以防止潜在的缓冲区溢出问题[^2]。例如,在处理字符串时,必须明确给出最大长度。 #### 示例代码 下面展示了一个典型的使用场景: ```c #include <stdio.h> int main() { const char tokenstring[] = "151214..."; char s[81]; char c; int i; float fp; // 使用 sscanf_s 解析字符串 sscanf_s(tokenstring, "%s", s, (unsigned)_countof(s)); sscanf_s(tokenstring, "%c", &c, sizeof(c)); sscanf_s(tokenstring, "%d", &i); sscanf_s(tokenstring, "%f", &fp); // 输出解析后的结果 printf("String=%s\n", s); printf("Character=%c\n", c); printf("Integer:=%d\n", i); printf("Real:=%f\n", fp); return 0; } ``` 在此示例中,`tokenstring` 被传递给 `sscanf_s` 的第一个参数位置,表明这是一个只读的字符串字面量。 --- #### 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值