Hi:) what i’m trying to do is write a simple program to expand from shortest entry
for example
a-z or 0-9 or a-b-c or a-z0-9
to longest write
for example
abc…xyz or 0123456789 or abc or abcdefghijklmnouprstwxyz0123456789
1-st examle shortest entry = 1-st example result which should give:)
so far i write something like this and it’s work only for letters from a to z:
expand(char s[])
{
int i,n,c;
n=c=0;
int len = strlen(s);
for(i = 1;s[i] > '0' && s[i]<= '9' || s[i] >= 'a' && s[i] <= 'z' || s[i]=='-';i++)
{
/*c = s[i-1];
g = s[i];
n = s[i+1];*/
if( s[0] == '-')
printf("%c",s[0]);
else if(s[i] == '-')
{
if(s[i-1]<s[i+1])
{
while(s[i-1] <= s[i+1])
{
printf("%c", s[i-1]);
s[i-1]++;
}
}
else if(s[i-1] == s[i+1])
printf("%c",s[i]);
else if(s[i+1] != '-')
printf("%c",s[i]);
else if(s[i-1] != '-')
printf("%c",s[i]);
}
else if(s[i] == s[i+1])
{
while(s[i] == s[i+1])
{
printf("%c",s[i]);
s[i]++;
}
}
else if( s[len] == '-')
printf("%c",s[len]);
}
}
but now i’m stuck:(
any ideas what should i check to my program work correctly?
Edit1: @Andrew Kozak (1) abcd (2) 01234
Thanks for advance:)
Here is a C version (in about 38 effective lines) that satisfies the same test as my earlier C++ version.
The full test program including your test cases, mine and some torture test can be seen live on http://ideone.com/sXM7b#info_3915048
Rationale
I’m pretty sure I’m overstating the requirements, but
a-c-bcan’t happen(char*) 0)printf("%c", c)each char without using extraneous functions.I put in some comments as to explain what happens why, but overall you’ll find that the code is much more legible anyways, by
*it=='-'orpredicate(*it)will just return false if it is the null character. Shortcut evaluation prevents us from accessing past-the-end input charactersONE caveat: I haven’t implemented a proper check for output buffer overrun (the capacity is hardcoded at 2048 chars). I’ll leave it as the proverbial exercise for the reader
Last but not least, the reason I did this:
More laterUpdate turns out I wasn’t far off: github (code + results)Pure C Implementation
Without further ado, the implementation, including the testcase:
Test output: