digitalmars.D - Abra-kah-dah-brah! Turn into a string ( std.string.toString() no working right...?)
- jicman (47/47) Mar 08 2005 I will enlighten you all with this very complicated piece of d code:
- Lukas Pinkowski (9/33) Mar 08 2005 This i hides the other int i; thus, when Month is Jan, i is 0, for Feb i...
- Regan Heath (6/25) Mar 09 2005 Do we want an error for this? (I think I do)
I will enlighten you all with this very complicated piece of d code:
import std.stdio;
import std.string;
char[] TurnToMonDigit(char[] mon)
{
char[] mm;
int i;
static char [3][12] sMon = ["Jan","Feb","Mar","Apr","May","Jun",
"Jul","Aug","Sep","Oct","Nov","Dec"];
for (int i=0;i<sMon.length;i++)
{
if(std.string.cmp(sMon[i],mon) == 0)
{
writef(sMon[i] ~ " " ~ mon ~ " ");
writef(i);
writef(" ");
break;
}
}
if(i > 11)
{
writefln("*** Bad Date found: " ~ mon ~ " ***");
return(null);
}
mm = std.string.toString(i+1);
mm = std.string.zfill(mm,2);
writef(mm ~ "\n");
return(mm);
}
void main (char[][] args)
{
char[] d;
d = TurnToMonDigit("Jan");
d = TurnToMonDigit("Feb");
d = TurnToMonDigit("Nov");
d = TurnToMonDigit("Dec");
}
Go ahead and compile it. :-) Then run it. :-) I get:
18:47:54.95>test
Jan Jan 0 01
Feb Feb 1 01
Nov Nov 10 01
Dec Dec 11 01
Huh?! :-| Isn't i suppose to be i+1? This is probably hidden in one of d's
technical writings, but I missed it. Anyone care to explain it?
thanks.
josé
Mar 08 2005
jicman wrote:import std.stdio; import std.string; char[] TurnToMonDigit(char[] mon) { char[] mm; int i;This i is initialized to 0.static char [3][12] sMon = ["Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec"]; for (int i=0;i<sMon.length;i++) { if(std.string.cmp(sMon[i],mon) == 0) { writef(sMon[i] ~ " " ~ mon ~ " "); writef(i);This i hides the other int i; thus, when Month is Jan, i is 0, for Feb it's 1 a.s.owritef(" "); break; } }Here the scope of the for(int i) is over, now we have the other i, which was intialized to 0.if(i > 11) { writefln("*** Bad Date found: " ~ mon ~ " ***"); return(null); } mm = std.string.toString(i+1);mm will be always "1", as i is initialized to 0, and you add 1 to it ;-) Greetings, Lukas
Mar 08 2005
On Wed, 09 Mar 2005 01:35:15 +0100, Lukas Pinkowski <Lukas.Pinkowski web.de> wrote:jicman wrote:Do we want an error for this? (I think I do) Can we get an error for this? Walter? Reganimport std.stdio; import std.string; char[] TurnToMonDigit(char[] mon) { char[] mm; int i;This i is initialized to 0.static char [3][12] sMon = ["Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec"]; for (int i=0;i<sMon.length;i++) { if(std.string.cmp(sMon[i],mon) == 0) { writef(sMon[i] ~ " " ~ mon ~ " "); writef(i);This i hides the other int i; thus, when Month is Jan, i is 0, for Feb it's 1 a.s.o
Mar 09 2005








"Regan Heath" <regan netwin.co.nz>