|
Hi everyone,
I know this will not be a tough one for you guys... I'm doing a Win32 Application I was trying to extract a string on a string but String.H is limitted I need more advance parsing like MID Function, I cant use CString.H since my project is notMFC, is there another way around that I can extract a string from a string by specifying the offsets and the length? I tried to use this code:
lpAlpha1 = DynamicData; //Just showing to you that I search a dynamic string....
StartPos = 0;
EndPos = 0;
strLen = strlen(lpAlpha1);
while (StartPos < strLen){
EndPos = strcspn(lpAlpha1," "); //Problem
for(i=StartPos,j=0;i<=EndPos;i++,i,j++){
searchStr[j] = lpAlpha1[i];
}
searchStr[j]='\0';
....Search the searchstring in the database..
StartPos = EndPos;
}
cout << searchStr;
But this code post a problem on the strcspn function since I can's specify which offset should it start looking for the space to get the next word on the string.
I hope you understand my explanation, Please help me on this one.
Thanks/Regards
Sidney
Thanks/Regards
Sidney
|
|
|
|
|
If you decide to switch to std::string s (which I highly recommend), then substr works like a charm for extracting substrings much like MID$ in BASIC does.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Hi Joaquin,
ummm... I can't quite understand the use of this, do you have a very sample code that can shoe on how to use this? Please if you have kindy send me a copy, I do not know how to use this.
Thanks/Regards
Sidney
|
|
|
|
|
Sure:
std::string str1="Hello miserable world";
std::str2=str1.substr(6,9);
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
string::SubStr does the same thing as CString::Mid
Consult MSDN for more info.
|
|
|
|
|
You can use that CRT strstr function (you can a pointer to the string tu substact and then you do a strncpy to copy into another string the string found. Anyway I would recommand std::string better.
Best regards,
Alexandru Savescu
|
|
|
|
|
If you already know MFC's CString, then just use WTL which has its own CString.
--Mike--
Just released - RightClick-Encrypt - Adds fast & easy file encryption to Explorer
Like the Google toolbar? Then check out UltraBar, with more features & customizable search engines!
My really out-of-date homepage
Sonork-100.10414 AcidHelm
|
|
|
|
|
Hi,
I have a function that loads a file from harddisk. I'd like to add a second function that loads the file from the resource. How do I get a pointer to the data and the size of it?
<br />
BOOL LoadTGA(char* filename, char** ptr);<br />
BOOL LoadTGA(UINT nIDResource, char** ptr);
thx, Moak
|
|
|
|
|
HINSTANCE hInstance = LoadLibrary(pDLLPath);
HINSTANCE hInstance = AfxGetInstanceHandle();
HRSRC hRsrc;
if (hRsrc = FindResource(hInstance, pResourceName, pResourceType))
{
HGLOBAL hGlobal = LoadResource(hInstance, hRsrc);
if (hGlobal)
{
BYTE *pImage = (BYTE *)LockResource(hGlobal);
DWORD dwSize = SizeofResource(hInstance, hRsrc);
.... whatever
UnlockResource(hGlobal);
FreeResource(hGlobal);
}
}
(src)
-c
Cheap oil. It's worth it!
|
|
|
|
|
looks easy now
|
|
|
|
|
I always get an error when doing this procedure "The parameter is invalid.", here's how i call it. (pIdl is an ITEMIDLIST retrieved by calling SHBrowseForFolder, ghWnd is the handle to my window, and pNewId is modified by the EnumIDList->Next procedure)
IShellFolder *pBrowse = NULL;
IShellFolder *CurrentFolder = NULL;
ITEMIDLIST *pNewId;
char szFolderPath[MAX_PATH+1];
char szCompletePath[MAX_PATH+1];
WCHAR szTemp[MAX_PATH+1];
STRRET strDispName;
SHGetDesktopFolder (&CurrentFolder);
CurrentFolder->BindToObject(pIdl, NULL, IID_IShellFolder, (LPVOID*)&pBrowse);
SHGetPathFromIDList(pIdl, szFolderPath);
pBrowse->GetDisplayNameOf(pNewId, SHGDN_INFOLDER, &strDispName);
PathCombine(szCompletePath, szFolderPath, strDispName.cStr)
MultiByteToWideChar (CP_ACP, 0, szCompletePath, -1, szTemp, sizeof (szTemp) / sizeof (WCHAR));
pBrowse->ParseDisplayName(ghWnd, NULL, szTemp, NULL, &pNewId, NULL);
Thanks all!
|
|
|
|
|
I know many of you probably already have a function that does this, so I'll ask before I do a lot of searching.
I need a simple C function for generating the next prime number given an input number. The prototype for this would be something like:
int GetNextPrime(const int iAfter);
If iAfter is 90, then GetNextPrime would return 101.
I need this to optimize some code I am working on which must initialize the size of an MFC CMap hash table.
|
|
|
|
|
How is this different from lots of class assignment questions posted in the list?
|
|
|
|
|
Hello. I can see how this might be viewed as a class assignment since I know that this type of thing is found in CS courses.
Unfortunantely for me, I am not a student and have never taken any CS courses. I'm sure with some searching on google I can find this kind of thing, but since it is a low priority right now, I thought I would post on CP. It is something I need (eventually) to do with some of my code where I populate CMap objects with varying amounts of data.
Sorry for the confusion.
|
|
|
|
|
I was just kidding. Long time back GiLes posted some code in The Lounge that calculated prime numbers. You may look under his profile. Right now my Internet is running slow so I can't help you. CP Who's who search for Giles and look his messages you will be able to find.
|
|
|
|
|
Thanks for the info. I went ahead and searched google and found one just to avoid any confusion.
One question, though. I knew you could just run through all the numbers and try and divide it by every number less than it, but I was kinda hoping there was some kind of math trick to make it faster or something.
I guess my original question should have been: Is there a better way to calculate prime numbers than just checking each number by dividing it by every number less than it?
|
|
|
|
|
Matt Gullett wrote:
knew you could just run through all the numbers and try and divide it by every number less than it, but I was kinda hoping there was some kind of math trick to make it faster or something
Of course there is. You need to check numbers up to square root of tested one.
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|
|
Thanks, that's exactly what I was looking for.
I probably should have known that, but it never crossed my mind.
|
|
|
|
|
Matt Gullett wrote:
I probably should have known that, but it never crossed my mind.
But you know that you can ignore even numbers?
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|
|
And numbers where n%6 is neither 1 nor 5.
|
|
|
|
|
Matt, here is a Java implementation that you could port to C/C++.
/ravi
"There is always one more bug..."
http://www.ravib.com
ravib@ravib.com
|
|
|
|
|
Matt Gullett wrote:
If iAfter is 90, then GetNextPrime would return 101.
Why don't you want 97?
If you're willing to pay a speed penalty (but for such small primes I don't think you'll notice) you could implement it as:
unsigned int GetNextPrime(unsigned int val)<br />
{<br />
val |= 1;<br />
while (!IsPrime(prev)) val += 2;<br />
return val;<br />
}<br />
The excercise for you would be the IsPrime function.
If you want a more generic solution for larger numbers (still < 31 bits), may I suggest you have a look at the NTL Number Theory Library and its PrimeSeq class.
|
|
|
|
|
Thanks.
Mike Nordell wrote:
Why don't you want 97?
Oh yea. 97 is a prime.;)
Thanks for the idea. I went ahead and implemented my code yesterday. I did something very similar to what you suggested. Very simple.
Amazingly, simply increasing my hash table size by 20% + using a prime number made a 11% improvement in performance for those operations.
|
|
|
|
|
The following chunk of code is supposed to loop through my CRichEdit control and get each line and show it in a messagebox.. eventually instead this will use a line printing function to print what is in the rich edit control.. heres the code:
void CTextViewer::OnBnClickedPrintbutton()
{
int i, nLineLength, nLineCount = m_edtRichEdit.GetLineCount();
CString strText, strLine;
for (i = 0; i < nLineCount; i++)
{
nLineLength = m_edtRichEdit.LineLength(i);
m_edtRichEdit.GetLine(i, strText.GetBuffer(nLineLength));
AfxMessageBox(strText.GetBuffer(0));
strText.ReleaseBuffer(nLineLength);
}
} heres the error:
Debug Error!
Program : ... blah.exe
DAMAGE: after Normal block (#3741) at 0x002F6B48. debugging throws me into dbgheap.c at _CRTIMP int __cdecl _CrtIsValidHeapPointer(
if i trace through it actually goes through all of the lines, and shows em all on the screen, but as it exits the function it gets this heap error.. any ideas? i copied the richedit example exactly and then modified it, but even unmodified i get the same error.. i thought maybe it was the \n's in my text, but i got rid of all those and have the same prob..
-dz
|
|
|
|
|
Remove GetBuffer(0) from AfxMessageBox call. CString has a LPCTSTR conversion operator.
Tomasz Sowinski -- http://www.shooltz.com
- It's for protection - Protection from what? Zee Germans?
|
|
|
|