标题:[求助]关于分隔符
只看楼主
金为床兮银为椅
Rank: 1
等 级:新手上路
帖 子:183
专家分:0
注 册:2006-3-20
 问题点数:0 回复次数:8 
[求助]关于分隔符

大家帮忙想想

题目 定义一个函数 参数 一个字符串(input),分隔符(deli)输出位置(index)输出字符串(outbufy)输出字符串长度(outbuflen)

完成功能举例: 比如给定字符串" sf asf as dfs",(注意字符串第一个符号是空格)假定deli是空格,如果index等于0则输出错误(错误类型可以参考注释),如果index等于1则输出sf,2输出asf,。。。。。
"as asdf asdf asdf":假定deli是空格,如果index等于0,则输出是as,1输出asdf。。。。。。。。
下面是我编写的

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

int GetPart(char *input, char deli, int index, char *outbufy, int outbuflen);

int main(void)
{
int i;
int j;
char out[30];

for(i = 0; i < 30; i++)
{
out[i] = 0;
}

for (j = 0; j < 10; j++)
{
i = GetPart(" sf asf as dfs", ' ', j, out, sizeof(out));

printf("\n结果:(%s)", out);

printf("\n返回值:(%d)",i);
}
return 0;
}
/*返回值
//1: no deli

//0: 正确

//-1 : no input

//-2 : index < 0

//-3 : index too large

//-4 : 第一个就是deli而且要求deli=0
*/
int GetPart(char *inputx, char deli, int index, char *outbufy, int outbuflen)
{
bool stop = true;

int delinum;//deli的数目

int x_num = 0;//变化的deli数目

int y_len = 0;//要拷贝的输出字符串的长度

char *xautop = inputx;
char *lockp = xautop;

if (inputx == NULL)
{
return -1;
}

if (index < 0)
{
return -2;
}

while (*xautop != '\0')
{

if (*xautop == deli)
{
x_num++;
}

xautop++;
}
delinum = x_num;

if (index > delinum)
{
strcpy(outbufy, "");
return -3;
}

x_num = 0;

xautop = inputx;

while ((x_num - 1) != index)
{
if((*inputx == deli) && (index == 0))
{
return -4;
}

if (*xautop == deli)
{
x_num++;
}

if ((x_num == index) && (stop))
{
lockp = xautop;

if (*lockp == deli)
{
lockp++;
}

if (*xautop == deli)
{
xautop++;
}

y_len = 0;

stop = false;
}

if (*xautop == '\0')
{
y_len++;
break;
}

xautop++;
y_len++;
}

if (x_num ==0)
{
return 1;
}

strncpy(outbufy, lockp, (y_len - 1));

outbufy[y_len - 1] = '\0';

return 0;
};

搜索更多相关主题的帖子: asdf deli 字符 分隔 index 
2006-05-23 16:20
coloar123
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2005-1-6
得分:0 

结果:()
返回值:(-4)
结果:(sf)
返回值:(0)
结果:(asf)
返回值:(0)
结果:(as)
返回值:(0)
结果:(dfs)
返回值:(0)
结果:()
返回值:(-3)
结果:()
返回值:(-3)
结果:()
返回值:(-3)
结果:()
返回值:(-3)
结果:()
返回值:(-3)Press any key to continue...

我电脑上运行的结果

两耳不闻窗外事,专心只读圣贤书
2006-05-23 18:33
金为床兮银为椅
Rank: 1
等 级:新手上路
帖 子:183
专家分:0
注 册:2006-3-20
得分:0 
真恶心,我的第一楼的说明帖子竟然被删除了。

我的目的是大家帮我想想 有没有别的方法,标题不让那么写,所以改了题目,让楼上的兄弟误会了。我的程序是正确的。

努力学习C、C++、LINUX、ORACLE、ENGLISH,累死为止。
2006-05-23 20:30
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
得分:0 


不太明白..非得用函数吗?

全写在main函数不行吗?

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-23 21:34
金为床兮银为椅
Rank: 1
等 级:新手上路
帖 子:183
专家分:0
注 册:2006-3-20
得分:0 
可以,
但是,建议main中不要写太多的代码去完成子功能。

努力学习C、C++、LINUX、ORACLE、ENGLISH,累死为止。
2006-05-24 08:52
coloar123
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2005-1-6
得分:0 
LZ,你想要用另外的什么方法实现呢?

两耳不闻窗外事,专心只读圣贤书
2006-05-24 09:19
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
得分:0 
(重新改过了)
# include <stdio.h>
main()
{
char a[20],deli=' ';
int i=0,k,x=0;
gets(a);
scanf("%d",&k);
if(a[0]==deli&&k==0) {printf("error!\n"); return 0;}
while(a[i]!='\0')
{
if(a[i]==deli)
x++;
if(x==k)
{ if(k!=0) i++;
while(a[i]!=deli&&a[i]!='\0')
{
printf("%c",a[i]) ;
i++;
}
printf("\n");
i=-1;
}
if(i==-1) break;
else i++;
}
}
先说好.我不知道是不是这意思.你试一下吧.因为我总理解错误

当然.代码应该还能简单.你先看看我理解错误没有吧

[此贴子已经被作者于2006-5-24 11:36:59编辑过]


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-24 10:40
金为床兮银为椅
Rank: 1
等 级:新手上路
帖 子:183
专家分:0
注 册:2006-3-20
得分:0 
sunshining为什么你总出汗呢?
你的程序没有我的程序友好。

努力学习C、C++、LINUX、ORACLE、ENGLISH,累死为止。
2006-05-24 11:09
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
得分:0 
<- 这就算出汗啊? 那你不就是偷笑嘛->

我出汗.你偷笑.扯平

友好什么意思...


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-24 11:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-66547-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014661 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved