将数字列表解析为范围 [英] resolving a list of numbers to a range

查看:60
本文介绍了将数字列表解析为范围的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,


如果有人知道解决整数列表的方法我就说

{1,2,3,4, 5}进入1-5的范围?

#include< stdlib.h>

#include< stdio.h>

#include< ctype.h>


int main(int argc,char * argv [])

{

int i = 0;

int prevNum = 0;

int x = 0;


if(argc < 1)

退出(EXIT_SUCCESS);

printf(" \ n");

printf("%s" ,argv [1]);


for(i = 1; i< argc; i ++)

{

if( prevNum> 0)

{

if((prevNum + 1)== atoi(argv [i]))

{

if(x == 0)

{

printf(" - ");

x = 1;

}

}

if if((prevNum + 1)!= atoi(argv [i]))

printf("%s,%s",argv [i-1],argv [i]);

else if((prevNum + 1)!= atoi(argv [i] )&& i == argc-1)

printf(& %s,argv [i-1]);


}

prevNum = atoi(argv [i]);

}

}


这是我能想到的,但由于某种原因它可以工作

对于数字,例如,1 2 3 4 7打印出1-4,7但如果你输入

数字1 2 3 4它输出1

Hi all,

I was just if anyone knows a way to resolve a list of integers say
{1,2,3,4,5} into a range that is 1-5?

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

int main(int argc, char*argv[])
{
int i=0;
int prevNum = 0;
int x=0;

if(argc < 1)
exit(EXIT_SUCCESS);
printf("\n");
printf("%s",argv[1]);

for(i=1;i<argc;i++)
{
if(prevNum > 0)
{
if( (prevNum+1) == atoi(argv[i]))
{
if(x==0)
{
printf("-");
x=1;
}
}
else if( (prevNum+1) != atoi(argv[i]))
printf("%s,%s",argv[i-1],argv[i]);
else if( (prevNum+1) != atoi(argv[i]) && i==argc-1)
printf("%s",argv[i-1]);

}
prevNum = atoi(argv[i]);
}
}

this is what i was able to come up with, but for some reason it works
for numbers like , 1 2 3 4 7 which prints out 1-4,7 but if you input
numbers of 1 2 3 4 it outputs 1

推荐答案

修改代码如下:
Modify the code as follows:
for(i = 1; i< argc; i ++)
{
if(prevNum> 0)
{
if((prevNum + 1)== atoi(argv [i]))
{
if(x == 0)
{
printf(" - ");
x = 1;
}
}
if if((prevNum + 1)!= atoi(argv [i] ))
printf("%s,%s",argv [i-1],argv [* i]);
if if((prevNum + 1)!= atoi(argv [i ])&& i == argc-1)
printf("%s",argv [i-1]);

}
prevNum = atoi( argv [i]);
}
}


for(i = 1; i< argc; i ++)

{

if(prevNum> 0)

{

if((prevNum + 1)== atoi(argv [i]))

{

if(x == 0)

{

printf(" - ");

x = 1;

}

}

else if((prevNum + 1)!= atoi(argv [i ]))

{

printf("%s,%s",argv [i-1],argv [i]);

X = 0; / *显示下一系列数字'' - ''* / b / b
}

}

prevNum = atoi(argv [i] );

}

/ *解决问题* /

if(x == 1)

printf("%s",argv [i-1]);


此外,您不再需要关注行了。否则if((prevNum + 1)!= atoi(argv [i])&& i == argc-1)
printf("%s",argv [i-1]);
for(i=1;i<argc;i++)
{
if(prevNum > 0)
{
if( (prevNum+1) == atoi(argv[i]))
{
if(x==0)
{
printf("-");
x=1;
}
}
else if( (prevNum+1) != atoi(argv[i]))
printf("%s,%s",argv[i-1],argv[*i]);
else if( (prevNum+1) != atoi(argv[i]) && i==argc-1)
printf("%s",argv[i-1]);
}
prevNum = atoi(argv[i]);
}
}
for(i=1;i<argc;i++)
{
if(prevNum > 0)
{
if( (prevNum+1) == atoi(argv[i]))
{
if(x==0)
{
printf("-");
x=1;
}
}
else if( (prevNum+1) != atoi(argv[i]))
{
printf("%s,%s",argv[i-1],argv[i]);
x=0; /* To display ''-'' for next series of numbers */
}
}
prevNum = atoi(argv[i]);
}
/* To fix your problem */
if ( x == 1 )
printf("%s",argv[i-1]);

Also you don''t need following lines anymore. else if( (prevNum+1) != atoi(argv[i]) && i==argc-1)
printf("%s",argv[i-1]);






以下代码也做同样的事情,但使用不同的逻辑....

#include< stdlib .h>

#include< stdio.h>

#include< ctype.h>


int main( int argc,char * argv [])

{

int i = 0;

int seriesStart = 0;

int curNum = 0,prevNum = 0;


if(argc< 1)

退出(EXIT_SUCCESS);


printf(" \ n");


seriesStart = prevNum = atoi(argv [1]);


printf("%d",seriesStart);


for(i = 2; i< argc; i ++)

{

curNum = atoi(argv [i]);


if(curNum!=(prevNum + 1))

{

if(seriesStart!= prevNum)

printf(" - %d,",prevNum);

else

的printf(QUOT;,&现状t;);


seriesStart = curNum;

printf("%d",seriesStart);


}

prevNum = curNum;

}


if((seriesStart!= curNum)&& (curNum == prevNum))

printf(" - %d",curNum);


返回0;

}

placid写道:
Following code also does the same thing but uses a different logic ....
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

int main(int argc, char*argv[])
{
int i=0;
int seriesStart=0;
int curNum=0,prevNum=0;

if(argc < 1)
exit(EXIT_SUCCESS);

printf("\n");

seriesStart = prevNum = atoi(argv[1]);

printf("%d",seriesStart);

for(i = 2; i < argc; i++)
{
curNum = atoi(argv[i]);

if(curNum != (prevNum+1))
{
if(seriesStart != prevNum)
printf(" - %d,",prevNum);
else
printf(",");

seriesStart = curNum;
printf("%d",seriesStart);

}
prevNum = curNum;
}

if((seriesStart != curNum) && (curNum == prevNum))
printf(" - %d",curNum);

return 0;
}
placid wrote:
大家好,

我当时有人知道解决整数列表的方法说
{1,2,3,4,5}进入1-5的范围?
#include< stdlib.h>
#include< stdio.h>
#include< ctype.h>

{i / 0;
int prevNum = 0;
int x = 0;

if(argc< 1)
exit(EXIT_SUCCESS);

printf(" \ n");
printf("%s",argv [1]);

for(i = 1; i< argc; i ++)
{
if(prevNum> 0)
{
if((prevNum + 1)== atoi(argv [i]))
{
if(x == 0)
{
printf(" - ");
x = 1;
}
}
if if((prevNum + 1)!= atoi(argv [i]))
printf("%s,%s",ar gv [i-1],argv [i]);
if if((prevNum + 1)!= atoi(argv [i])&& i == argc-1)
printf("%s",argv [i-1]);

}
prevNum = atoi(argv [i]);
}
}

这是我能想到的,但由于某种原因,它适用于数字,如1 2 3 4 7打印超出1-4,7但是如果你输入数字1 2 3 4它输出1
Hi all,

I was just if anyone knows a way to resolve a list of integers say
{1,2,3,4,5} into a range that is 1-5?

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

int main(int argc, char*argv[])
{
int i=0;
int prevNum = 0;
int x=0;

if(argc < 1)
exit(EXIT_SUCCESS);
printf("\n");
printf("%s",argv[1]);

for(i=1;i<argc;i++)
{
if(prevNum > 0)
{
if( (prevNum+1) == atoi(argv[i]))
{
if(x==0)
{
printf("-");
x=1;
}
}
else if( (prevNum+1) != atoi(argv[i]))
printf("%s,%s",argv[i-1],argv[i]);
else if( (prevNum+1) != atoi(argv[i]) && i==argc-1)
printf("%s",argv[i-1]);

}
prevNum = atoi(argv[i]);
}
}

this is what i was able to come up with, but for some reason it works
for numbers like , 1 2 3 4 7 which prints out 1-4,7 but if you input
numbers of 1 2 3 4 it outputs 1






我经历了你的代码,发现它只响应参数

如果给出

否则它会退出。但不像代码AM。给出了它,这段代码

并没有默默地退出。它返回运行时错误并暂停

系统进程。虽然两个代码包含相同的

if(argc< 1)

退出(EXIT_SUCCESS);

有人可以澄清


我在windows xp sp2下运行Borland 5.5.1编译器


谢谢

Pradyut
< a rel =nofollowhref =http://pradyut.tktarget =_ blank> http://pradyut.tk
http://spaces.msn.com/members/oop-edge/
http://groups-beta.google.com/group/oop_programming

印度


Coder写道:
i went through your code and found that it only responds to arguments
if given
else it would exit. But unlike the code "AM" gave out it, this code
doesn''t exit out silently. It returns a runtime error and halts the
system process. Although both the codes contain the same
if (argc < 1 )
exit(EXIT_SUCCESS);
can somebody please clarify

I''m running Borland 5.5.1 compiler under windows xp sp2

Thanks
Pradyut
http://pradyut.tk
http://spaces.msn.com/members/oop-edge/
http://groups-beta.google.com/group/oop_programming
India

Coder wrote:
以下代码也做同样的事情,但使用不同的逻辑....

#include< stdlib.h>
#include< stdio.h>
#include< ctype.h>

int main(int argc,char * argv [])
{i / 0;
int seriesStart = 0;
int c urNum = 0,prevNum = 0;

if(argc< 1)
退出(EXIT_SUCCESS);

printf(" \ n");

seriesStart = prevNum = atoi(argv [1]); <对于(i = 2; i< argc; i ++)
{
curNum = atoi(argv [i]);

if(curNum!=(prevNum + 1))
{
if(seriesStart!= prevNum)
printf(" ; - %d,",prevNum);

printf(",");

seriesStart = curNum;
printf("% d",seriesStart);

}
prevNum = curNum;
}
if((seriesStart!= curNum)&&(curNum == prevNum))
printf(" - %d",curNum);

返回0;
}

placid写道:
Following code also does the same thing but uses a different logic ....
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

int main(int argc, char*argv[])
{
int i=0;
int seriesStart=0;
int curNum=0,prevNum=0;

if(argc < 1)
exit(EXIT_SUCCESS);

printf("\n");

seriesStart = prevNum = atoi(argv[1]);

printf("%d",seriesStart);

for(i = 2; i < argc; i++)
{
curNum = atoi(argv[i]);

if(curNum != (prevNum+1))
{
if(seriesStart != prevNum)
printf(" - %d,",prevNum);
else
printf(",");

seriesStart = curNum;
printf("%d",seriesStart);

}
prevNum = curNum;
}

if((seriesStart != curNum) && (curNum == prevNum))
printf(" - %d",curNum);

return 0;
}
placid wrote:
大家好,

如果有人知道一种解决整数列表的方法,请说
{1,2,3,4,5}进入一个范围那是1-5?

#include< stdlib.h>
#include< ; stdio.h>
#include< ctype.h>

int main(int argc,char * argv [])
{
int i = 0 ;
int prevNum = 0;
int x = 0;

if(argc< 1)
退出(EXIT_SUCCESS);

printf(" \ n");
printf("%s",argv [1]);

for(i = 1; i< argc; i ++)
{
if(prevNum> 0)
{
if((prevNum + 1)= = atoi(argv [i]))
{
if(x == 0)
{
printf(" - ");
x = 1 ;
}
}如果((prevNum + 1)!= atoi(argv [i]))
printf("%s,%s",argv [ i-1],argv [i]);
如果((prevNum + 1)!= atoi(argv [i])&& i == argc-1)
printf(" ;%s",argv [i-1]);

}
prevNum = atoi(argv [i]);
}
}

这是我能想到的,但由于某种原因,它的工作原理如数字,1 2 3 4 7打印出1-4,7,但如果你输入
数字1 2 3 4输出1
Hi all,

I was just if anyone knows a way to resolve a list of integers say
{1,2,3,4,5} into a range that is 1-5?

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

int main(int argc, char*argv[])
{
int i=0;
int prevNum = 0;
int x=0;

if(argc < 1)
exit(EXIT_SUCCESS);
printf("\n");
printf("%s",argv[1]);

for(i=1;i<argc;i++)
{
if(prevNum > 0)
{
if( (prevNum+1) == atoi(argv[i]))
{
if(x==0)
{
printf("-");
x=1;
}
}
else if( (prevNum+1) != atoi(argv[i]))
printf("%s,%s",argv[i-1],argv[i]);
else if( (prevNum+1) != atoi(argv[i]) && i==argc-1)
printf("%s",argv[i-1]);

}
prevNum = atoi(argv[i]);
}
}

this is what i was able to come up with, but for some reason it works
for numbers like , 1 2 3 4 7 which prints out 1-4,7 but if you input
numbers of 1 2 3 4 it outputs 1






这篇关于将数字列表解析为范围的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆