|
Hi All,
How to convert Chinese VC++ .rc file to English VC++ .rc file.
I have a VC++ project the dialog resource is in Chinese language
I want to convert the Chinese dialog resource to English dialog resource
how to do it?
Is there any tool?
Pls suggest me.
|
|
|
|
|
You could use Google Translate[^] to do this, but it is not guaranteed to be 100% accurate.
You would need somebody to do this by hand.
|
|
|
|
|
I seriously doubt Google translate is accurate with Chinese (although probably worth a try)... I would just about guess doing it by hand is the only viable option.
|
|
|
|
|
If I were doing it, I'd try Google translate, unless you can find someone fluent in both Chinese and English. If you try an automatic translator, like Google, you will surely need to clean up the results so you don't get hilarious or embarrassing text in your resource strings!
CQ de W5ALT
Walt Fair, Jr., P. E.
Comport Computing
Specializing in Technical Engineering Software
|
|
|
|
|
Hi all
i am encrypt my string using base 64,
but sometimes at the end of string the pad char '=' is occur and the Char for index 62 and 63 also non alphnumric.
i want only alphnumbric values.
so is this possible in this case?
is yes please help me how can i do this?
thanks in advance.
waiting for ur valuable suggestions.
|
|
|
|
|
Base64 is a standard encoding so you will have [A-Z], [a-z], [0-9], +, / and = (complément)
This willl make 26 + 26 + 10 + 2 = 64 characters and = is used as a filling.
If the string is to be used say in an URL, then you must do the appropriate encoding to ensure that the string is valid for that purpose.
You cannot have only alphanumeric characters as they allows only 62 possibilities and Base64 encoding is based on encoding 64 possibilities (6 bits at a time).
Philippe Mori
|
|
|
|
|
As Phillipe mentioned, Base64 uses 64 characters and alphanumerics only contains 62 characters, so if you are determined to use Base 64, there is no good way to confine the results to only 62 alphanumeric characters. Sorry about that.
If you aren't too concerned about using the normal Base64 encoding, then you can devise your own encoding scheme or even substitute some other characters, such as @ , _ , $ , etc. for the ones you don't want. Of course that means you'll need to do the substitution on your own, both when encoding and decoding.
CQ de W5ALT
Walt Fair, Jr., P. E.
Comport Computing
Specializing in Technical Engineering Software
|
|
|
|
|
Hi,
Have a look at Base32 Encoding[^]. This is what most 'serial number' algorithms use to ensure printable alphanumeric characters.
Best Wishes,
-David Delaune
|
|
|
|
|
Le@rner wrote: i want only alphnumbric values.
First verify that requirement. It would be a very unusual.
But if you really need that then you can't use base 64 because it includes non-alphanumerics.
You could create your own encoding in base32 using a alpha/numeric for the padding but I doubt it is worth it. You can also use hex which isn't space efficient but is easy to produce.
|
|
|
|
|
Hi all,
i m generating a random string,but its give same result when i generate these.
means i generate 5 different string than each and every time these 5 string are same as previously generated.
i am using rand() function for this.
FOU84
GFX7V
GGIK1
JF33K
KEGRV
i want each time generate a new and different string.
please help me for this.
thanks in advance.
modified on Saturday, July 2, 2011 7:23 AM
|
|
|
|
|
The rand() function will always return the same sequence from the same starting point. You should first add a seed to make it start from a truly random point as described here[^].
The best things in life are not things.
|
|
|
|
|
|
Whenever you find a windows function does not do quite what you want it is always best to consult the MSDN[^] documentation first.
The best things in life are not things.
|
|
|
|
|
|
hi, i have C exam next week, so i started solving questions from previous years exams and run into this question, the answer i come up to is far far from having reasonable length, it's too complicated and long , but i can't come up anything shorter.
the question is: write a function that receives an array of letters , and a pointer to final result string that hasn't allocated yet, the function supposed to take the array of letters and count the appearance of every letter and make the final result string look like that:
received array of letters : "abbacdeefg"
result string: "a 2;b 2;c 1;d 1;e 2;f 1;g 1"
in the result it should be alphabetically printed
here is the code that i wrote, it just doesn't makes sense that this is the actual solution:
void sortarray(char str[],char * final)
{
int i = 1,j, extra = 0;
char * letters, *lerrptr;
int * count, * cerrptr;
int size = 0, flag = 0;
letters = (char *) malloc(sizeof(char) * 1);
if(letters == NULL) exit(1);
count = (int *) malloc(sizeof(int) * 1);
if(count == NULL) exit(1);
letters[0] = str[0];
count[0] = 1;
size++;
while(str[i] != 0)
{
flag = 0;
for(j = 0 ; j < size ; j++)
{
if(str[i] == letters[j])
{
count[j]++;
flag = 1;
}
}
if(!flag)
{
flag = 0 ;
size++;
lerrptr = letters;
letters = (char *) realloc(letters,sizeof(char) * size);
if(letters == NULL)
{
free(lerrptr);
free(count);
exit(1);
}
cerrptr = count;
count = (int *) realloc(count,sizeof(int) * size);
if(letters == NULL)
{
free(cerrptr);
free(letters);
exit(1);
}
letters[size-1] = str[i] ;
count[size-1] = 1 ;
}
i++;
}
for(i = 0 ; i < size - 1; i++)
{
for(j = 0 ; j < size - 1 - i ; j++)
{
if(letters[j] < letters[j - 1])
{
letters[j] ^= letters[j+1];
letters[j+1] ^= letters[j];
letters[j] ^= letters[j+1];
count[j] ^= count[j+1];
count[j+1] ^= count[j];
count[j] ^= count[j+1];
}
}
}
for(i = 0 ; i < size ; i++) if(count[i] > 9) extra++;
final = (char *) malloc(sizeof(char) * (size * 4) + extra + 1);
j = 0;
for(i = 0 ; i < size ; i++)
{
final[i*4 + j] = letters[i];
final[i*4 + 1 + j] = ' ';
if(count[i] > 9)
{
final[i*4 + 2 + j] = count[i]/10 + 48;
j++;
final[i*4 + 2 + j] = count[i]%10 + 48 ;
}
else final[i*4 + 2 + j] = count[i] + 48;
final[i*4 + 3 + j] = ';';
}
final[i*4 + j] = 0;
printf(" %s ", final);
}
can anyone help me come up with more reasonable solution?
|
|
|
|
|
It's probably not the shortest possible solution, but to give you an idea maybe:
void sortarray(char str[],char *final)
{
int counter[26] = {0};
int finallength = 0;
int i;
for(i=0;str[i];i++)
counter[str[i]-'a']++;
for(i=0;i<26;i++){
if(counter[i])
finallength += 4;
if(counter[i] > 9)
finallength ++;
}
final = (char*)malloc(finallength+1);
final[0] = 0;
char part[6];
for(i=0;i<26;i++)
if(counter[i]){
sprintf(part,"%c %d;",i+'a',counter[i]);
strcat(final,part);
}
final[finallength-1] = 0;
printf(final);
}
I copied some behaviour from your code which I would like to comment on though:
1. sortarray receives char * final , i.e. a single pointer. While you can use malloc on this, the function which calls sortarray , does not get its pointer to final updated. To solve this, you would need to pass a double pointer (so char **).
2. We're ignoring the case where a letter may occur more than 99 times in a string. It's probably a fair assumption but it's good to be aware of this.
modified 13-Sep-18 21:01pm.
|
|
|
|
|
thanks a lot, yes i know , the question didn't implied i have to save it, (there is a problem i forgot to free it in the end thou)
and yes i hope the assumption is fair, the question doesn't actually mentions anything about it
|
|
|
|
|
Good catch about the free, I forgot it as well
Good luck with your exam!
modified 13-Sep-18 21:01pm.
|
|
|
|
|
|
Handling occurrence greater that 100 would requires a few extra lines.
int test = counter[i];
while (test >= 10)
{
++finalLength;
test /= 10;
}
Your code assume that the input string only contains the 26 lowercase letters. Without specification, we could assumes that we want to support all 256 possible 8 bit characters.
Filling of the final array could be a little more effecicient by using strlen and a pointer to the current output position.
As a final note, final length is 1 too big except for empty input. Thus is might be possible that the returned string contains one garbage character at the end.
Philippe Mori
|
|
|
|
|
Since you are using 8 bits characters, one solution would be to allocate an array (of integers) for all possible letters and initialize the whole array to 0. Then for each received letter, you increment the appropiate count (the array is indexed by the ordinal value of the character).
After that, you could compute the size of the string to create.
As an alternative, this could also be done while receiving letters. Each time a letter is used for the first time, you must add 4 characters. And each time an incrementation cause the number of digit to increment (from 9 to 10, 99 to 100 etc...) add 1 to the required number of digits.
Then you can allocate the array. A special case would be when the input is empty. You would have to uses a size of 1 instead of 0.
Finally as the indexed array is already in order, you can then write the result skipping any count of 0. An ; need to be added before outputting the letter, space and count except for the first outputted item.
Then final '\0' need to be appended at the end.
By the way an array and a loop could be used to have the list of value when one digit need to be added. That is an array with values like 10, 100, 1000... up to the desired maximum (1e10 to support 32 bit integer range).
In fact, the code would be much simpler and shorter by assuming worst case (256 * 13) assuming a 32 bit program. You then output to that buffer and at the end, you allocated the final string using the actual length (+ 1) of the outputted string.
If temporary memory usage is not a problem, it could then easily be done in less than 20 lines of code.
Philippe Mori
|
|
|
|
|
Hi,
atikot wrote: can anyone help me come up with more reasonable solution? This is shorter:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
void CharCount(char str[], char** result)
{
int i;
unsigned int count[256];
if (!strlen(str))
return;
if (*result = (char*)malloc(min(strlen(str), 256) * 8))
{
char* out = *result;
memset(count, 0, sizeof(count));
for (i = 0; str[i]; i++)
++count[str[i]];
for (i = 0; i < 256; i++)
if (count[i])
out += sprintf(out, "%c %u;", (char)i, count[i]);
*--out = '\0';
}
}
int main()
{
char* out = NULL;
CharCount("abbacdeefg", &out);
if (out)
printf("%s\n", out);
free(out);
}
cheers,
AR
Code edited after Stefan_Lang[^]'s excellent review.
When the wise (person) points at the moon the fool looks at the finger (Chinese proverb)
modified on Monday, July 4, 2011 10:43 AM
|
|
|
|
|
Two things:
1. If applied to a very long string (e. g. a string containing an entire article or book) the result string becomes unreasonably large. You might want to determine the minimum between strlen(str) and 256 rather than just strlen(str) . Also, since you're printing the chars as ints, you'll need at least 6 bytes to store the result of "%c %d;" from sprintf() since the first value can be up to 3 digits long.
2. You're printing the characters as integers, against the specification. (note: you can safely do so since you won't count any nonprintable characters that might meddle with your output). Printing chars as chars will also shorten the output string (see above)
|
|
|
|
|
Hi Stefan,
Not sure this quick answer deserved such in-depth excellent review
My updated post should address your pertinent issues, and handle empty input string.
cheers,
AR
When the wise (person) points at the moon the fool looks at the finger (Chinese proverb)
|
|
|
|
|
I have written a simple, test case DLL for the Metatrader 4 platform but unfortunately it is not working, and the first thing I would like is to check that my parameter passing syntax is correct.
The C++ code
MT4_EXPFUNC void _stdcall updateBuffer( history * history, double * buffer, int Bars, int IndicatorCounted, int ma_period )
{
for( int ii = 0; ii < Bars; ii++ )
{
buffer[0] = history[ii].close;
}
}
The .mgh code
#import "test.dll"
void updateBuffer( double& history[][6], double& buffer[], int bars, int indicator_counted, int ma_period );
#import
The relevant parts of the .mq4 file
#import "test.dll"
void updateBuffer( double& history[][6], double& buffer[], int bars, int indicator_counted, int period );
#import
int start(){
updateBuffer(history, buffer, Bars, IndicatorCounted(), ma_period);
}
Could someone check that I have declared and am passing all parameters correctly?
|
|
|
|
|