| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1830 人关注过本帖
标题:[求助] 明天的作业,想半天不会做
只看楼主 加入收藏
金为床兮银为椅
Rank: 1
等 级:新手上路
帖 子:183
专家分:0
注 册:2006-3-20
收藏
得分:0 

下面是我以前写的一个用分隔符提取字段的例子,你改改判断条件应该可以用的统计字符的多少可以用int i = strlen()判断大小来确定。
说明:假设给出的字符串input是(a sf asf as dfs)分隔符deli是空格( ),要求第几个是index;输出是outbufy,输出块大小是outbuflen,如果index是0则输出a,index是2则输出asf,你把判断条件改成你的就可以了。
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
#include "mydisjoin.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 < 2; 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;
};


努力学习C、C++、LINUX、ORACLE、ENGLISH,累死为止。
2006-05-08 10:26
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(law825)[求助] 明天的作业,想半天不会做
以下是引用law825在2006-5-7 22:15:00的发言:

问个问题拉:输入一个字符,内有数字和非数字字符,如a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组a中.统计共有多少个整数,并输出这些数.

#include<stdlib.h>
#include<stdio.h>
main( )
{
char str[80],*p=str;long Li;
printf("input your string: ");
gets(str);
while(1)
{ while(*p&&(*p<'0'||*p>'9'))p++;
if(*p=='\0')break;
Li=strtol(p,&p,10);
printf("%ld ",Li);
}
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-08 11:51
law825
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-3-5
收藏
得分:0 

链表还没学呢,用指针的方法应该可以做把,想ing~~~~

2006-05-08 14:05
law825
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-3-5
收藏
得分:0 
#include "stdio.h"

main()

{static char str[80];

char *p=&str[1];

int a[20],i=0,j,b=0;

gets(p);

for(;*p!='\0';p++)

if(*p>='0'&&(*p)<='9')b=b*10+(*p)-'0';

else if(*(p-1)>='0'&&(*(p-1))<='9'){a[i++]=b;b=0;}

else continue;

if(*(p-1)>='0'&&(*(p-1))<='9')a[i++]=b;

printf("numbers:%d\n",i);

for(j=0;j<i;j++)
printf("%d ",a[j]);

printf("\n");

}


没调试工具,帮忙调试下看看可以拨

[此贴子已经被作者于2006-5-8 21:50:40编辑过]

2006-05-08 14:46
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

明显不可以....
for(j=0;j
这句就挂了

哎~既然都写到这个份上了,我干脆就写完了吧



/**
* 题目:
*
* 输入一个字符串,内有数字和非数字字符,如a123x456 17960? 302tab5876
* 将其中连续的数字作为一个整数,依次存放到一数组a中.
* 统计共有多少个整数,并输出这些数.
*/
#include<stdio.h>

/*定义一个链表结构*/
struct List {
struct List *next;
long number;
};


int main(void){
char buffer[80],*p=buffer;/*buffer接收输入的字符串,p对buffer进行处理*/
long *number,i=0,count=0;/*number存放字符串中的整数,count统计整数个数*/
struct List list,*pList=&list,*temp;/*pList,temp都是链表的临时指针,temp用于链表释放时存储要释放的节点*/

/**
* 下面这段代码的作用是让用户输入80个字符的字符串,然后把其中的数字插入到链表当中
*/
printf("input your string: ");
fgets(buffer,80,stdin);/*只允许用户从键盘中接收80个字符*/
while(1){
while( *p && !isdigit(*p) ) p++;/*找到第一个数字开始的地方*/
if( !*p ) break;
pList = (pList->next = malloc( sizeof(struct List) ));/*链表插入操作*/
if( pList==NULL ) exit(1);/*如果内存分配失败,结束应用程序*/
pList->number = strtol(p,&p,10),count++;/*给节点赋值,同时计数器++*/
};
pList->next = NULL;/*节点封尾*/


/**
* 这段代码的作用是
* 1.为number开辟空间
* 2.将链表中节点的值复制到数组中
* 3.在复制的同时将链表销毁
*/
number = malloc( (sizeof(long))*count );/*给number开辟空间*/
pList = list.next;
for(i=0;i<count;i++){
number[i] = pList->number;/*为number数组赋值*/
temp = pList;
pList = pList->next;
free(temp);/*销毁节点*/
}

/**
* 将number数组中的值输出,毫无悬念,肯定是正确的输出,要不我也不敢贴出来 ^-^
*/
for(i=0;i<count;i++)
printf("number[%ld]= %ld\n",i,number[i]);
printf("total:%d\n",count);

/*记得出门关灯哦~*/
free(number);
return 0;
}


淘宝杜琨
2006-05-08 16:14
law825
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-3-5
收藏
得分:0 
呵呵 打上去的时候心不在焉,现在怎么样啊.
2006-05-08 21:52
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
都是能用的哈~~~

淘宝杜琨
2006-05-08 22:05
law825
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-3-5
收藏
得分:0 
刚下好拉VC 试拉下 OK 谢谢大家拉
2006-05-08 22:48
chernL
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-4-30
收藏
得分:0 
牛人~不过7楼写的太麻烦一点了八~

come on~~day day up!!
2006-05-08 23:24
shen2006
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-4-20
收藏
得分:0 
11楼的............
不错哦

2006-05-09 00:05
快速回复:[求助] 明天的作业,想半天不会做
数据加载中...
 
   



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

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