字符截取问题

dttlove_ni 2009-04-15 02:02:35
字符截取问题

char a[8];
char b[8];
char c[8];

char str[30];

strcpy(str, "aaa|bbb|ccc");



写个程序C语言得到:a="aaa";b="bbb";c="ccc"
...全文
472 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
webber820 2010-06-18
  • 打赏
  • 举报
回复
sscanf能在c下面用吗???
dskit 2009-08-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 breezes2008 的回复:]
C/C++ codechar regx[]="|";char str[30];char*p="aaa|bbb|ccc";char*token;for(token=strtok(p,regx);token!=NULL;token=strtok(NULL,regx))
strcpy(str,token);


[/Quote]

-->char p[]="aaa|bbb|ccc";
strtok试图修改p值向的内存区域
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zjl_1026_2001 的回复:]
引用 8 楼 hairetz 的回复:
引用 4 楼 kostion 的回复:
有一个函数叫strtok,就是用指定的字符,分解字符串为N个字串的。标准函数。效率高,可移植兼容性好


strtok是不错,但是sscanf更方便.


你那个是为什么会那么写格式化字符串呢,能不能解释一下啊
[/Quote]

..你可以搜索一下sscanf的用法啊
沙漠里的海豚 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hairetz 的回复:]
引用 4 楼 kostion 的回复:
有一个函数叫strtok,就是用指定的字符,分解字符串为N个字串的。标准函数。效率高,可移植兼容性好


strtok是不错,但是sscanf更方便.
[/Quote]

你那个是为什么会那么写格式化字符串呢,能不能解释一下啊
breezes2008 2009-04-15
  • 打赏
  • 举报
回复
哦,最后一条应该是:strcat(str,token);
char str[30]="";
breezes2008 2009-04-15
  • 打赏
  • 举报
回复
char regx[]="|";
char str[30];
char *p="aaa|bbb|ccc";
char *token;
for(token=strtok(p,regx);token!=NULL;token=strtok(NULL,regx))
strcpy(str,token);


  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kostion 的回复:]
有一个函数叫strtok,就是用指定的字符,分解字符串为N个字串的。标准函数。效率高,可移植兼容性好
[/Quote]

strtok是不错,但是sscanf更方便.
WOBUGUAN 2009-04-15
  • 打赏
  • 举报
回复
或者手写一个,也不是很复杂。

#include <stdio.h>
#include <string.h>

int main()
{
char a[8];
char b[8];
char c[8];

char str[30];

strcpy(str, "aaa|bbb|ccc");

{
unsigned i, j, len = strlen(str);
char *p = a;

for (i = j = 0; i < len; i ++)
if (str[i] != '|')
p[j ++] = str[i];
else {
p[j] = '\0';
j = 0;
if (p == a)
p = b;
else
p = c;
}
}

printf("%s %s %s\n", a, b, c);
return 0;
}

kostion 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hairetz 的回复:]
用sscanf.
C/C++ codeintmain()
{chara[8];charb[8];charc[8];charstr[30];

strcpy(str,"aaa|bbb|ccc");
sscanf(str,"%[^|]|%[^|]|%s",a,b,c);
cout<<a<<""<<b<<""<<c<<endl;return0;
}

aaa bbb ccc
Press any key to continue
[/Quote]

顶,但是不知道sscanf是怎么实现的
Proteas 2009-04-15
  • 打赏
  • 举报
回复
strtok
kostion 2009-04-15
  • 打赏
  • 举报
回复
有一个函数叫strtok,就是用指定的字符,分解字符串为N个字串的。标准函数。效率高,可移植兼容性好
chenqiang35 2009-04-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hairetz 的回复:]
用sscanf.

C/C++ code


int main()
{
char a[8];
char b[8];
char c[8];

char str[30];

strcpy(str, "aaa|bbb|ccc");
sscanf(str,"%[^|]|%[^|]|%s",a,b,c);
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}




aaa bbb ccc
Press any key to continue
[/Quote]


很强大 膜拜
chenqiang35 2009-04-15
  • 打赏
  • 举报
回复


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char a[8];
char b[8];
char c[8];
memset(a,0,8);
memset(b,0,8);
memset(c,0,8);

char str[30];
memset(str,0,30);

strcpy(str, "aaa|bbb|ccc");

int flag = 0, i = 0, ai = 0, bi = 0, ci = 0;
while(str[i])
{

if(0 == flag && str[i] != '|')
{
a[ai] = str[i];
ai++;
}
else if(1 == flag && str[i] != '|')
{
b[bi] = str[i];
bi++;
}
else if(2 == flag && str[i] != '|')
{
c[ci] = str[i];
ci++;
}
if(str[i] == '|')
flag++;

i++;
}

printf("a = %s , b = %s, c = %s\n", a, b, c);

return 1;
}


a = aaa , b = bbb, c = ccc
Press any key to continue
  • 打赏
  • 举报
回复
用sscanf.



int main()
{
char a[8];
char b[8];
char c[8];

char str[30];

strcpy(str, "aaa|bbb|ccc");
sscanf(str,"%[^|]|%[^|]|%s",a,b,c);
cout<<a<<" "<<b<<" "<<c<<endl;
return 0;
}


aaa bbb ccc
Press any key to continue

69,373

社区成员

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

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