qfedu-c-level/day11/homework/h9.c

64 lines
2.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
以下为我们的手机收到的短信的格式请利用指针数组与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;
}