挑战任务
这次“绿盟杯”大赛,小明作为参赛选手在练习的时候遇到一个问题,他要对一个范围的两个数进行数位的累加,例如有两个数 15
,19
则 他们的数位和应该为:
1+5+1+6+1+7+1+8+1+9,结果为40
。
你来帮他解决这个问题吧。
编程要求
补充完善右侧代码区中的getSum(int num1,int num2)
函数,实现对两个数num1
和num2
的数位和相加,最后返回计算的结果即可。
注:num1
和num2
的值都在1-999
之间。
测试说明
样例1
输入:
15
19
输出:
40
注意:
getSum
函数,将计算结果作为返回值返回即可;4
个测试用例,需所有测试用例评测通过才能得分;开始挑战吧,祝你成功!
代码如下:
#include
using namespace std;
/***************************
* 函数功能: 计算两个整数的和
* return: 计算结果
* @para num1: 第一个整数
* @para num2: 第二个整数
***************************/
int getSum(int num1, int num2)
{
/********** BEGIN **********/
int sum = 0;
for (int i = num1; i <= num2; i++)
{
int ans = i;
while (ans) sum += ans % 10, ans /= 10;
}
return sum;
/********** END **********/
}
挑战任务
参加“绿盟杯”竞赛的小红遇到一个问题,她想要编写代码实现一个文件查看器,要实现指定文件夹下所有文件以及文件夹目录结构的展示。
你来帮她实现这个功能吧。
编程要求
编程实现对给定文件夹目录结构的展示,如果是文件夹则在其名字之前加上+--
若是文件则加上--
,上级目录与下级目录、下级文件用两个空格作为间隔,同级下依照文件夹、文件的首字母顺序依次打印;补充完善右侧代码区中的showDirStructure(char *folderPath)
函数实现要求的功能,其中函数参数含义如下:
folderPath
:指定要显示的文件夹测试说明
样例1
输入:src/step2/root
输出:
样例2
输入:src/step2/dir
输出:
提示: 在C
语言中使用readdir
函数可以获取目录内容,使用stat
函数判断文件类型。
你可以通过如下链接下载本关涉及到的目录文件:
https://www.educoder.net/attachments/download/200773/step2Dir.zip
开始挑战吧,祝你成功!
解题思路:
首先要弄懂题目提供的两个函数的用法以及函数一些参数的含义;
readdir函数:返回参数dir 目录流的下个目录进入点。
d_name参数:文件名
具体请点击下面的链接:
https://blog.csdn.net/ztm521/article/details/44457601
stat函数:stat()用来将参数file_name 所指的文件状态, 复制到参数所指的结构中
st_mode参数:文件的类型和存取的权限
S_ISDIR (st_mode) :判断是否为目录
S_ISREG (st_mode) :判断是否为一般文件
具体请点击下面的链接:
https://blog.csdn.net/allenguo123/article/details/41011801
直接就是搜索,全部走一遍就可以了,注意理解两个函数的用法
代码如下:
#include
#include
#include
#include
#include
using namespace std;
/***************************
* 函数功能: 遍历文件夹
* return: void
* @para folderPath: 文件夹路径
***************************/
void showDirStructure(char *folderPath)
{
/********** BEGIN **********/
static int temp = 0;
char s[300];
int i = strlen(folderPath) - 1;
while (i>0 && folderPath[i] != '/') i--;
//截取当前的文件名或文件夹名
strncpy(s, folderPath + i + 1, strlen(folderPath) - i);
//std::cout << s << std::endl;
for (int i = 0; id_name, ".") || !strcmp(ddir->d_name, ".."))
continue;
struct stat ss;
strcpy(s, folderPath);
strcat(s, "/");
strcat(s, ddir->d_name);
stat(s, &ss);
//判断是不是文件夹,如果是就直接进入更深的一层
if (S_ISDIR(ss.st_mode)) {
temp += 1;
showDirStructure(s);
temp -= 1;
}
else {
for (int i = 0; i <= temp; i++)
cout << " ";
cout << "--" << ddir->d_name << endl;
}
}
closedir(dir);
/********** END **********/
}
挑战任务
参加“绿盟杯”竞赛的小明想要开发一个图片查看器,他想只显示文件夹下所有图片类型的文件。
你来帮小明实现这个功能吧。
编程要求
基本功能与第二题类似,编程实现对给定文件夹目录结构的展示,如果是文件夹则在其名字之前加上+--
若是文件则加上--
,上级目录与下级目录、下级文件用两个空格作为间隔,同级下依照文件夹、文件的首字母顺序依次打印;另外需要对文件进行过滤,只显示图片类型的文件,本关需要过滤的图片文件类型有:“jpg,png,bmp”,请补充完善右侧代码区中的showDirStructure(char *folderPath)
函数实现本关要求的功能,其中函数参数含义如下:
folderPath
:指定要显示的文件夹测试说明
样例1
输入:src/step3/root
输出:
提示:
你可以通过如下链接下载本关涉及到的目录文件:
https://www.educoder.net/attachments/download/202620/step3Dir.zip
开始挑战吧,祝你成功!
解题思路:这题就在第二题的基础上稍微改一下就好了,利用文件名将文件的后缀截取出来,然后进行比较就行了。。。
代码如下:
#include
#include
#include
#include
#include
using namespace std;
/***************************
* 函数功能: 遍历文件夹
* return: void
* @para folderPath: 文件夹路径
***************************/
void showDirStructure(char *folderPath)
{
/********** BEGIN **********/
static int temp = 0;
char s[300];
int i = strlen(folderPath) - 1;
while (i>0 && folderPath[i] != '/') i--;
//截取当前的文件名或文件夹名
strncpy(s, folderPath + i + 1, strlen(folderPath) - i);
//std::cout << s << std::endl;
for (int i = 0; id_name, ".") || !strcmp(ddir->d_name, ".."))
continue;
struct stat ss;
strcpy(s, folderPath);
strcat(s, "/");
strcat(s, ddir->d_name);
stat(s, &ss);
//判断是不是文件夹,如果是就直接进入更深的一层
if (S_ISDIR(ss.st_mode)) {
temp += 1;
showDirStructure(s);
temp -= 1;
}
else {
//判断是不是普通文件
if (S_ISREG(ss.st_mode)) {
int i = strlen(ddir->d_name) - 1;
while (i>0 && ddir->d_name[i] != '.') i--;
//截取文件后缀名
strncpy(s, ddir->d_name + i + 1, strlen(ddir->d_name) - i);
if (!strcmp(s, "jpg") || !strcmp(s, "png") || !strcmp(s, "bmp")) {
for (int i = 0; id_name << endl;
}
}
}
}
closedir(dir);
/********** END **********/
}