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;
|
||
}
|