Re: [问题] 撷取档案名称后只想输出前段字符

楼主: loveme00835 (发箍)   2020-11-14 14:52:13
※ 引述《lazy0813 (菜边巴)》之铭言:
: 开发平台(Platform): Win10
: 编译器:Dev-C++
: 问题(Question):
: 小弟目前是C初学者,我想请教版上各位先进。
: 我目前想要把文件中的档案名称撷取前面几个字符建立成一份清单,
: 但是不知道该怎么做,目前想法是应该把字串转为字符。
: btw,档案名称为:20110827001040.00.led.01.00-03.00h.jpg
: 想撷取为20110827001040.00.led.01.00-03.00h
以下恕删
这看起来比较像是逻辑思考和资源利用问题, 而不是实作问题. 根据你的描述
, 原始档名可以标记成两个部分:
20110827001040.00.led.01.00-03.00h.jpg
紫色是你想撷取的部分, 而绿色是已知副档名. 我们可以用二分法来处理它:
如果能找出紫色的范围 (原问题), 我们也能知道绿色有哪些字符; 相反地,
若我们找出.jpg出现在哪里, 要撷取的字串也就呼之欲出.
要在字串里面找字串, 可以先找看看标准函式库里有没有现成的工具, 它们的
宣告放在 <string.h> 里, 大致的描述可以在 cppreference 找到:
String handling
https://en.cppreference.com/w/c/string/byte
点进去在众多的说明里, 你可以找到和我们目标相符的函式: strstr()
strstr finds the first occurrence of a substring of characters
(function)
https://en.cppreference.com/w/c/string/byte/strstr
看完里面的范例程式, 我们就可以做个实验看看能否利用 strstr() 来找到
.jpg字串, 从而找出要撷取的字串:
#include <stddef.h>
#include <stdio.h>
#include <string.h>
const char filename[] = "20110827001040.00.led.01.00-03.00h.jpg";
const char* const extenstion = strstr(filename, ".jpg");
// get sub-string length before ".jpg"
const size_t length = (extenstion - filename);
// print sub-string with specific length
printf("%.*s", length, filename);
接着就是根据实际需求去做修改了.
作者: lazy0813 (菜边巴)   2020-11-25 16:50:00
感谢大神 后来我用循环把字符一个个拉出来了,之后再试试大神的方法来精简程式

Links booklink

Contact Us: admin [ a t ] ucptt.com