字符串处理问题

DX_deepblue 2012-01-04 11:55:30
各位帮忙想个办法处理下面的问题:
有字符串 "单身"<760026313@qq.com>; "XXD"<502144951@qq.com>; "凤凰"<542307112@qq.com>
我要把邮箱提取出来,转化成 760026313@qq.com|502144951@qq.com|542307112@qq.com

邮箱中间是 | 符号;请问有什么好的方法,或者有没有直接格式化的函数。

还有的字符串是"" <111@qq.com>;"" <222@sina.com.cn>;"" <333@yahoo.com>; 这个样子的,也需要做同样的处理;
各位帮忙想下,有思路的说一下,谢谢,过节多送些分


...全文
190 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang_bird 2012-01-05
  • 打赏
  • 举报
回复
文件read.txt内容
"单身"<760026313@qq.com>; "XXD"<502144951@qq.com>; "凤凰"<542307112@qq.com>
"" <111@qq.com>;"" <222@sina.com.cn>;"" <333@yahoo.com>;

输出文件write.txt
760026313@qq.com|502144951@qq.com|542307112@qq.com


#include <stdio.h>
#include <string.h>
#define SEPCHARS "\"<;>"
int main(void)
{
char *word; //存放单词
char *hao; //查找最后一个'|'的指针
char b[300]; //从文件读取一行存放在b数组中
char a[300]={0}; //数据转换后存放在a数组中

FILE *frp=fopen("read.txt","r");
FILE *fwp=fopen("write.txt","w+");

while(fgets(b,300,frp)!=NULL)
{
a[0]='\0';
word=strtok(b,SEPCHARS);
while(word!=NULL)
{
if(isdigit(*word))
{
printf("%s\n",word);
strcat(a,word);
strcat(a,"|");
}
word=strtok(NULL,SEPCHARS);
}
hao=strrchr(a,'|');
*hao='\n';
printf("%s",a);
fputs(a,fwp);
}

}


赵4老师 2012-01-05
  • 打赏
  • 举报
回复
上帖代码中应删除#include <string.h>
赵4老师 2012-01-05
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <string.h>
#define BUF_LEN 1024
#define EMAIL_LEN 80
char s[]="\"单身\"<760026313@qq.com>; \"XXD\"<502144951@qq.com>; \"凤凰\"<542307112@qq.com>;\"\" <111@qq.com>;\"\" <222@sina.com.cn>;\"\" <333@yahoo.com>;";
char *p,*q;
int n,k;
char e[EMAIL_LEN];
char b[BUF_LEN];
void main() {
p=s;
q=b;
while (1) {
if (1==sscanf(p,"%*[^<]<%[^>]>%n",e,&n)) {
p+=n;
k=sprintf(q,"%s|",e);
q+=k;
if (q-b>BUF_LEN-EMAIL_LEN) break;
} else break;
}
q[-1]=0;//去掉末尾的|
printf("%s\n",b);
}
运行结果
760026313@qq.com|502144951@qq.com|542307112@qq.com|111@qq.com|222@sina.com.cn|333@yahoo.com
尘缘udbwcso 2012-01-04
  • 打赏
  • 举报
回复

#include <stdio.h>

void getMailbox(char *str)
{
int i = 0, j = 0;
while(str[j] != '\0')
{
if(str[j++] == '<')
{
while(str[j] != '>')
str[i++] = str[j++];
str[i++] = '|';
}
}
str[i-1] = '\0';
}
int main()
{
char str[] = """ <111@qq.com>;"" <222@sina.com.cn>;"" <333@yahoo.com>;";
getMailbox(str);
printf("%s\n", str);
return 0;
}
gqjjqg 2012-01-04
  • 打赏
  • 举报
回复

#include <stdio.h>

int main(void)
{
char a[300];
char b[300] = "\"单身\"<760026313@qq.com>; \"XXD\"<502144951@qq.com>; \"凤凰\"<542307112@qq.com>";
sscanf(b, "%*[^<]%*c%[^>]s", a);
printf("%s\n", a);
return 0;
}
// output : 760026313@qq.com


自信男孩 2012-01-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mougaidong 的回复:]
这么有规律的字符串,还需要考虑什么?

到源码里面找,切分字符串的split函数,按照'<' 和 '>' 切分出来
[/Quote]
恩,解析到字符串,然后匹配选择。
ouyh12345 2012-01-04
  • 打赏
  • 举报
回复
std::string::find_first_of
编程点滴 2012-01-04
  • 打赏
  • 举报
回复
直接判断是否是<>,中间的就是你要的字符串了
turing-complete 2012-01-04
  • 打赏
  • 举报
回复
turing-complete 2012-01-04
  • 打赏
  • 举报
回复
这么有规律的字符串,还需要考虑什么?

源码里面找,切分字符串的split函数,按照'<' 和 '>' 切分出来
qq120848369 2012-01-04
  • 打赏
  • 举报
回复
owenliang@linux-7lsl:~/csdn/src> echo "\"单身\"<760026313@qq.com>; \"XXD\"<502144951@qq.com>; \"凤凰\"<542307112@qq.com>" | sed -r 's/[<>]|("[^"]*")//g' | awk -F ";" '{gsub(";"," | ");print;}'                        
760026313@qq.com | 502144951@qq.com | 542307112@qq.com


没注意这种, 这个可以工作了.
qq120848369 2012-01-04
  • 打赏
  • 举报
回复
owenliang@linux-7lsl:~/csdn/src> echo "\"\"<111@qq.com>;\"\" <222@sina.com.cn>;\"\" <333@yahoo.com>;" | sed -r 's/["<>]//g' | awk -F ";" '{gsub(";"," | ");print;}'

111@qq.com | 222@sina.com.cn | 333@yahoo.com |
cliffbaby 2012-01-04
  • 打赏
  • 举报
回复
这种问题 考虑用脚本语言比较便捷!

69,377

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧