一个字符串函数的实现

r11222 2010-07-27 02:13:46
实现一个函数

在给定的字符串缓冲区中提取不是空格的部分

例如,给定一个字符串缓冲区 charbuf[30],内容为 "ABC CD DE FG CH" , 需要提取 ABC,CD,DE,FG,CH

我知道用 sscanf可以,但具体指针怎么移动?? 因为空格的数量不确定。

谢谢解答
...全文
130 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2010-07-27
  • 打赏
  • 举报
回复
将要扫描的字符串写到临时文件中,然后
//...
while (1) {
if (feof(f)) break;
if (1==fscanf(f,"%s",s)) {
printf("[%s]\n",s);
} else {
fscanf(f,"%*c");
}
}
//...
ilwmin 2010-07-27
  • 打赏
  • 举报
回复
如果一定要用sscanf的话也可以实现,对于中间多少个空格或者指针怎么移动可以不用管它,下面是我实现的代码,有些麻烦,简单测试了一下,针对你的数据可以实现,其它没做过测试,不知对你有没有帮助.

int main(void)
{
char str[] = "ABC CD DE FG CH";
char arr[10]={0};
char *buf;
char *loc=0;
int len=0;

buf=str;
sscanf(buf,"%s",arr);

len=strlen(arr);
printf("arr : %s\n", arr);
while (*(buf+len)!='\0')
{
memset(arr,'\0',sizeof(arr));
sscanf(buf+len,"%s",arr);
loc=strstr(buf+len,arr);
len=strlen(arr);
buf=loc;
printf("arr : %s\n", arr);
}
return 0;
}
localxiao 2010-07-27
  • 打赏
  • 举报
回复
http://blog.chinaunix.net/u2/76292/showart_1778403.html
xy_zhang 2010-07-27
  • 打赏
  • 举报
回复
不用sscanf,直接遍历好了,可以用两个指针,pBegin和pEnd:

1. 开始的时候,都指向缓冲区的头部;

2. 然后一个字符一个字符地读。如果读到的是空格,两个指针一起往后移(这时候两个指针相等);

3. 如果读到非空格,pEnd往后移,直到碰到下一个空格,这时候输出pBegin和pEnd之间的部分,然后把pEnd赋给pBegin,重复步骤2,直至缓冲区读取完毕。

wang0635 2010-07-27
  • 打赏
  • 举报
回复
先用strchr函数查找空格,然后循环,一直到非空格为止
lbjfeng 2010-07-27
  • 打赏
  • 举报
回复
其实,你可以选择便利,不是空格的,就放置在一个buf中
r11222 2010-07-27
  • 打赏
  • 举报
回复
关键在于 ABC CD 之间可以有多个空格,怎样知道sscanf 跳过了几个空格?
r11222 2010-07-27
  • 打赏
  • 举报
回复
我说是我应该怎么移动

例如

sscanf(charbuf ,“%s", temp);

那temp读到就是ABC.

那我下一次调用 sscanf,如果不改变charbuf,也是读到ABC,那我怎么读到CD呢?
ilwmin 2010-07-27
  • 打赏
  • 举报
回复
你是说sscanf内部指针是怎么移动的?还是?
r11222 2010-07-27
  • 打赏
  • 举报
回复
晕,CSDN 把我的字符串改掉了,我的字符串 每个不为空格的元素中间都可以有任意多个空格。。就是 ABC,CD 之间有 多个空格,不是一个

69,373

社区成员

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

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