IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> codewars -- 5kyu ---Convert A Hex String To RGB -> 正文阅读

[移动开发]codewars -- 5kyu ---Convert A Hex String To RGB

作者:recommend-item-box type_download clearfix

codewars – 5kyu —Convert A Hex String To RGB

题目:When working with color values it can sometimes be useful to extract the individual red, green, and blue (RGB) component values for a color. Implement a function that meets these requirements:

Accepts a case-insensitive hexadecimal color string as its parameter (ex. “#FF9933” or “#ff9933”)
Returns a Map<String, int> with the structure {r: 255, g: 153, b: 51} where r, g, and b range from 0 through 255
Note: your implementation does not need to support the shorthand form of hexadecimal notation (ie “#FFF”)

Example
“#FF9933” --> {r: 255, g: 153, b: 51}

测试代码块部分:

#include <criterion/criterion.h>

typedef struct {
    int r, g, b;
} rgb;

void tester(const char *hex_str, rgb expected);

Test(Sample_Tests, should_pass_all_the_tests_provided) {
  {
    const char *hex_str = "#FF9933";
    rgb expected = {255, 153, 51};
    tester(hex_str, expected);    
  }
  {
    const char *hex_str = "#beaded";
    rgb expected = {190, 173, 237};
    tester(hex_str, expected);    
  }
  {
    const char *hex_str = "#000000";
    rgb expected = {0, 0, 0};
    tester(hex_str, expected);    
  }
  {
    const char *hex_str = "#111111";
    rgb expected = {17, 17, 17};
    tester(hex_str, expected);    
  }
  {
    const char *hex_str = "#Fa3456";
    rgb expected = {250, 52, 86};
    tester(hex_str, expected);    
  }
}

解答代码块:

typedef struct {
    int r, g, b;
} rgb;

//结构体RGB,
rgb hex_str_to_rgb(const char *hex_str) {
  /*结构体指针和结构体两种定义方式,此为结构体指针定义方式,后面调用要用箭头(->);注意定义结构体指针
  后要给结构体指针赋值,将结构体的首地址赋值给结构体指针,首地址(&hex_str_to_rgb)
  rgb *p;
  rgb hex_str_to_rgb;
   p =  &hex_str_to_rgb;
  */
  
  
  //此种定义为结构体定义,后面调用结构体里面的参数时,用点(.)调用。
  rgb hex_str_to_rgb;
    int a[7];
  //强制类型转换,无法得出正确的结果,因为*hex_str是char类型的,执行强制类型转化的话,就会把对应的
  //字符转换成ASCII码,并不是将16进制的数转化为十进制。
  /*
    hex_str_to_rgb.r = ((int)*(hex_str+1)*16 + (int)*(hex_str+2));
    hex_str_to_rgb.g = ((int)*(hex_str+3)*16 + (int)*(hex_str +4));
    hex_str_to_rgb.b = ((int)*(hex_str+5)*16 + (int)*(hex_str +6));
*/
  //创造一个循环,把这些字符代表的16进制数,转化为10进制,并存在一个整型数组里面。
  for(int i = 1;i<7;i++){
    if((*(hex_str+i)>='0')&&(*(hex_str+i)<='9')){
      a[i] = *(hex_str+i) - '0';
    }
       else if((*(hex_str +i )>='a')&&(*(hex_str+i)<='f')){
         a[i] =( *(hex_str+i) - 'a') +10;
       }
       else if ((*(hex_str +i)>='A')&&(*(hex_str+i)<='F')){
         a[i] = (*(hex_str +i)-'A') +10;
       }   
    }
  //搞清楚结构体什么时候用点(.),什么时候用箭头(->)
  //结构体定义,其内部参数调用方式如下
    hex_str_to_rgb.r = a[1]*16 + a[2];
    hex_str_to_rgb.g = a[3]*16 + a[4];
    hex_str_to_rgb.b = a[5]*16 + a[6];
  /*
     p->r = a[1]*16 + a[2];
     p->g = a[3]*16 + a[4];
     p->b = a[5]*16 + a[6];
  */
    //  <----  hajime!
  /*该部分代码,一开始打印,看看是否要提出第一个元素“#”
for(int i =0;i<7;i++){
  printf("%c\n",*(hex_str+i));
}
  printf("%s\n",hex_str);
  */
  return hex_str_to_rgb;
  
}

1.结构体的定义,结构体和结构体指针的声明,及对应声明不同后续的调用参数方式不同,点或者箭头。
2.16进制字符如何转换为数字,(同类型的参数可以做加减,例如,‘f’ - ‘a’);

优质解答:

#include <stdio.h>

typedef struct { int r, g, b; } rgb;

rgb hex_str_to_rgb(const char *hex_str) {
  int r, g, b;
  sscanf(hex_str, "#%2x%2x%2x", &r, &g, &b);
  return (rgb){r, g, b};
}

**sccanf函数,描述,C 库函数 int sscanf(const char str, const char format, …) 从字符串读取格式化输入

**声明
下面是 sscanf() 函数的声明。
int sscanf(const char str, const char format, …)

sscanf函数的定义,用法。(https://www.runoob.com/cprogramming/c-function-sscanf.html)

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 14:08:36  更:2022-01-08 14:10:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:09:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码