|
|
Yep !!!
That did it, and I almost implemented it by myself....
Thanks
|
|
|
|
|
Another "tool" to keep in your box is the "%I64d" format specifier? Use it with sprintf().
|
|
|
|
|
I have the following line in my code:
sprintf(Tempcrap1, "%02d", Modi[i] - 64);
strcat(Tempcrap, Tempcrap1);
Where I am translating the alpha to numeric:
A-010,b-020,c-030 ....
for some reason I am loosing 0 after the numbers.
My result is:a-01,b-02,c-03... Where is the error?
|
|
|
|
|
|
yes. It gives me 007.Instead of 070.
|
|
|
|
|
OK,
How about
"%.2d" - This will print a leading zero before any decimal
|
|
|
|
|
Below my proc. where I am translating value.
Case when Numeric,numeric,alpha: is fine.
Case when Alpha,numeric,numeric is incorrect.
Example:G73-07013 but my program transalted to 00773.
A-010,b-020,c-030 etc.
int convert_char_modifier_new(char *Modifier, char *NewModifier)
{/* Convert Modifier value from alpha to numeric */
char NewMod2[8];
char Tempcrap[8];
char Tempcrap1[8];
char Tempcrap2[8];
memset(NewMod2,0x00,sizeof(NewMod2));
memset(Tempcrap,0x00,sizeof(Tempcrap));
memset(Tempcrap1,0x00,sizeof(Tempcrap1));
unsigned int i;
for ( i = 0; i < strlen(Modifier); i++ )
{
if (isdigit(Modifier[i]))
{
sprintf(Tempcrap1, "%d", Modifier[i] - 48);
strcat(Tempcrap, Tempcrap1);
}
else
{
sprintf(Tempcrap1, "%02d", Modifier[i] - 64);
strcat(Tempcrap, Tempcrap1);
}
}
sprintf(NewMod2, "%03s", Tempcrap);
strcat(NewModifier, NewMod2);
return(0);
}
|
|
|
|
|
I'm not sure I understand your input/output. From what I gather you are wanting something like this for letters:
Input : Output
A : 010
B : 020
C : 030
D : 040
...
Y : 250
Z : 260 Is that right? If so, this should work:
sprintf(Tempcrap1, "%03d", (Modi[i] - 64) * 10);
If the input contains numbers, like:
Input : Output
0 : 000
1 : 010
2 : 020
3 : 030
...
8 : 080
9 : 090
sprintf(Tempcrap1, "%03d", (Modi[i] - 48) * 10);
|
|
|
|
|
Thank you for reply.
The problem is when
input : Output
A 10
B 20
C 30
...........
Y 25
Z 26
I am missing 0 if number 10,20,30,...90.
|
|
|
|
|
my problem is I need to have this value at the end:
A-10
b-20
c-30
...
y-25
x-26
|
|
|
|
|
At the end of what? I've yet to determine what you are considering input and what you are considering output. Do something simple like:
When my program sees input like "input data goes here", I want the output to be "output data goes here"
|
|
|
|
|
"input data goes here" : "output data goes here"
A : 010
B : 020
C : 030
D : 040
...............
Z : 026
Y : 025
|
|
|
|
|
This won't work. See the problem?
A 010 N 014
B 020 O 015
C 030 P 016
D 040 Q 017
E 050 R 018
F 060 S 019
G 070 T 020
H 080 U 021
I 090 V 022
J 010 W 023
K 011 X 024
L 012 Y 025
M 013 Z 026
|
|
|
|
|
I am so sorry. I mistype:
it should look like this:
A 010 N 140
B 020 O 150
C 030 P 160
D 040 Q 170
E 050 R 180
F 060 S 190
G 070 T 200
H 080 U 210
I 090 V 220
J 100 W 230
K110 X 240
L 120 Y 250
M130 Z 260
My output should be:
A 10 N 14
B 20 O 15
C 30 P 16
D 40 Q 17
E 50 R 18
F 60 S 19
G70 T 20
H80 U 21
I 90 V 22
J10 W 23
K11 X 24
L 12 Y 25
M13 Z 26
|
|
|
|
|
You just can't make up your mind, can you? First you state that "it should look like this" and show one table, and then you follow that with "my output should be" and show a completely different table.
In the bottom table, do you not see the obvious error? A and J cannot both be 10.
|
|
|
|
|
Now I understand what you are saying. I am appreciated for your patient.
I am just learning C++, so I am not seeing full picture at first.
My project is to translate from alpha to numeric starting with the A=10 increase the next letter by 10 and then delete zero before numbers.
I got it to work but I am missing zero after the number if number=10…90.
What would you recommended to do with the J?
|
|
|
|
|
sardinka wrote:
My project is to translate from alpha to numeric starting with the A=10 increase the next letter by 10 and then delete zero before numbers.
This will do exactly that:
sprintf(Tempcrap1, "%d", (Modi[i] - 64) * 10);
|
|
|
|
|
I copyed your line of code into my program.
here my output(what I am getting).
Examples:
Entered Value:Should be : I am getting
9AB : 90102 : 91020
Z73 : 26073 : 26073
9ZY : 92625 : 9260250
|
|
|
|
|
There are still discrepancies. For example, when Z73 is input, you want (and are getting) 26073 as output. Assuming the 26 is for the Z, why does the 7 get a leading 0 but the 3 does not?
Use:
sprintf(Tempcrap1, "%02d", Modi[i] - 64);
when converting letters to numbers, and:
sprintf(Tempcrap1, "%d", Modi[i] - 48);
otherwise. This will produce:
Input : Output
9AB : 90102
Z73 : 260703
9ZY : 92625
|
|
|
|
|
I do not need to produce for 7 a leading 0.
In this case should be Z-260 and rest of the string.
|
|
|
|
|
Do you not find it odd that each time you state what you want, it's different from the time before? Has anyone ever told you it's very difficult to hit a moving target?
In this latest post, you want "260" to be the output for "Z", yet in the previous post (i.e., "9ZY : 92625 : 9260250"), you want "26" to be the output for "Z".
I think it's time you step back and better define your requirements.
|
|
|
|
|
Hi
I hope I am not asking a real dumb question but this problem has got me beat. I am compiling my MFC developed application and linking it with someother libraries that I have got from somewhere and compiled myself. When I do this I get the following linking errors
ctn_lib.lib(dcm.obj) : error LNK2001: unresolved external symbol __pctype
ctn_lib.lib(utility.obj) : error LNK2001: unresolved external symbol __pctype
ctn_lib.lib(dcm.obj) : error LNK2001: unresolved external symbol ___mb_cur_max
ctn_lib.lib(utility.obj) : error LNK2001: unresolved external symbol ___mb_cur_max
Release/LMWS.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
Before getting to this stage I had some errors about duplicate definition of stuff in libcmt.lib and msvcrt.lib so I have told the system to ignore libcmt.lib
Now I have looked on the web and seen that the offending symbols are declared in ctype.h.
Now my questions are
- obviously now can I sort this out
- but also in the error message I am getting the symbols have two '_' and three '_' characters respectively but in the ctype.h file they only have one and two respectively.
Is this second question of any relevence or am I just not understanding how the compiler puts it altogether.
Many thanks for any help.
Andrew
|
|
|
|
|
With respect to your second question, I guess the extra underscores are not important --it is some sort of name encoding performed by the compiler prior to letting the linker act. If you want to see this in full action, try declaring and using some undefined member function on a class of your own: when the linker fails to find the definition you'll see the name has been adorned with all kinds of funny characters.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
If all this is in V6... I don't know settings in V7, then:
Probably you have checked in project settings "Ignore default libraries". Try to add in libraries section libcd.lib (for debug builds) or libc.lib (release).
The best way to detect such missing link symbols - at least for me - is to copy the offending symbol name, modify project settings to:
- uncheck "Ignore default libraries"
- check in Link --> Customize --> Print Progress messages
and rebuild all.
The linked with produce a verbose output wher you can search for the symbol. Usually, it will look like this:
[Unsuccesful build]
xxxxxxxx.obj : error LNK2001: unresolved external symbol _yyyyyyy
[Rebuild with ignore default lib. off]
Searching <your-lib-path>\<libname>.lib:
Found __yyyyyyy
Referenced in xxxxxxxx.obj
Loaded DDDDDDDD.lib(DDDDDDDD.dll)
Now you see that the missing lib is DDDDDDDD.lib; put back your project settings, add the new lib to Link section and rebuild.
Usual trap libraries:
- CRT: libc.lib (C), libcp.lib (C++), libcmt.lib (C multithread), libcpmt.lib (C++ MT)
- msvcrt.lib
(add a 'd' for debug builds, so Release uses libc.lib, Debug uses libcd.lib etc.)
- COM support classes (_com_error) in comsupp.lib
- Common dialogs in commdlg32.lib
- shell API (shlwapi.lib)
just to point some of (my ) usual mistakes.
|
|
|
|