64 lines
2.1 KiB
C
64 lines
2.1 KiB
C
|
/*
|
|||
|
以下为我们的手机收到的短信的格式,请利用指针数组与strtok函数对其解析
|
|||
|
char msg_src[] = {"+CMGR:REC UNREAD,+8613466630259,98/10/01,18:22:11+00,ABCdefGHI"};
|
|||
|
|
|||
|
解析结果:
|
|||
|
日期:98 / 10 / 01
|
|||
|
时间:18 : 22 : 11
|
|||
|
发件人:13466630259
|
|||
|
内容:ABCdefGHI
|
|||
|
|
|||
|
参考以下的函数名字以及参数,完成相应的要求
|
|||
|
int msg_deal(char *msg_src, char *msg_done[], char *str)
|
|||
|
参数1:待切割字符串的首地址
|
|||
|
参数2:指针数组:存放切割完字符串的首地址
|
|||
|
参数3:切割字符
|
|||
|
返回值:切割的字符串总数量
|
|||
|
*/
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h>
|
|||
|
#include <string.h>
|
|||
|
|
|||
|
int msg_deal(char *msg_src, char *msg_done[], char *str)
|
|||
|
{
|
|||
|
int cnt = 0;
|
|||
|
char *tmp = strtok(msg_src, str);
|
|||
|
while (tmp != NULL)
|
|||
|
{
|
|||
|
|
|||
|
if (cnt == 1) // 如果是发件人,去掉前面的 +86
|
|||
|
{
|
|||
|
if (strncmp(tmp, "+86", 3) == 0) // 如果前三位是 +86
|
|||
|
tmp += 3; // +86 的长度为 3, tmp 指针向后移动 3 位
|
|||
|
}
|
|||
|
|
|||
|
if (cnt == 3) // 处理时间字符串
|
|||
|
{
|
|||
|
int len = strlen(tmp); // 获取字符串长度
|
|||
|
if (len >= 3 && strcmp(tmp + len - 3, "+00") == 0) // 如果末尾是 +00 且字符串长度大于等于 3
|
|||
|
tmp[len - 3] = '\0'; // 去掉末尾的 +00,即将 +00 替换为 \0
|
|||
|
}
|
|||
|
|
|||
|
msg_done[cnt++] = tmp; // 将切割后的字符串存入指针数组
|
|||
|
tmp = strtok(NULL, str); // 继续切割
|
|||
|
}
|
|||
|
|
|||
|
return cnt; // 返回切割的字符串总数量
|
|||
|
}
|
|||
|
|
|||
|
int main()
|
|||
|
{
|
|||
|
char msg_src[] = {"+CMGR:REC UNREAD,+8613466630259,98/10/01,18:22:11+00,ABCdefGHI"};
|
|||
|
char *msg_done[5]; // 5 个字符串
|
|||
|
char str[] = ","; // 以逗号为切割字符
|
|||
|
|
|||
|
int cnt = msg_deal(msg_src, msg_done, str);
|
|||
|
|
|||
|
printf("日期:%s\n", msg_done[2]);
|
|||
|
printf("时间:%s\n", msg_done[3]);
|
|||
|
printf("发件人:%s\n", msg_done[1]);
|
|||
|
printf("内容:%s\n", msg_done[4]);
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|