浅谈函数sscanf 和 snprintf
【每日一题】- leetcode 537. 复数乘法
- 【思路】虚数构成:a+bi;利用sscanf函数读取实部a和虚部b;再利用snprintf函数将计算后的实部a和虚部b以【%d+%di】输入到字符串中
char * complexNumberMultiply(char * num1, char * num2){
char *ans = (char*)malloc(sizeof(char)*20);
int a , b , c, d;
//读取实部和虚部
sscanf(num1 , "%d+%di", &a , &b);
sscanf(num2 , "%d+%di", &c , &d);
int sum1 = a*c - b*d , sum2 = a*d + b*c;
//输出实部和虚部
snprintf(ans, 20 ,"%d+%di", sum1,sum2);
return ans;
}
- 浅谈函数sscanf
相同点 | 不同点 | |
---|---|---|
scanf | sscanf 与 scanf类似,都是用于输入的 | scanf 以屏幕(stdin)为输入源 |
sscanf | sscanf 与 scanf类似,都是用于输入的 | sscanf 以目标字符串为输入源 |
【函数原型】: Int sscanf( string str, string fmt, mixed var1, mixed var2 … );
【使用方式】: snprintf( stdin , format , ans[ ]… , &b… );
stdin | 表示数据输入源 |
---|---|
format | 读取方式可以是一个或多个符号 |
ans[ ]… , &b… | 数据读取方式(如:" %d ") |
- 浅谈函数snprintf
相同点 | 不同点 | |
---|---|---|
printf | printf 与 snprintf类似,都是用于输出的 | printf 函数将数据打印到屏幕上 |
snprintf | printf 与 snprintf类似,都是用于输入的 | snprintf 函数将数据读取到目标位置 |
【函数原型】: int snprintf(char *restrict buf, size_t n, const char * restrict format, …);
【使用方式】: snprintf( buf , n , format , stdin );
buf | 表示数据保存的位置 |
---|---|
format | 数据读取方式(如:" %d ") |
stdin | 表示数据输入源 |
【注意】
(1) 如果格式化后的字符串长度 < n,则将此字符串全部复制到buf中,并给其后添加一个字符串结束符(’\0’);
(2) 如果格式化后的字符串长度 >= n,则只将其中的(n-1)个字符复制到buf中,并给其后添加一个字符串结束符(’\0’),不需要考虑溢出的问题,返回值为欲写入的字符串长度。