Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Fill array

Fill array

Scheduled Pinned Locked Moved C / C++ / MFC
data-structuresjsonhelptutorial
14 Posts 5 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • _ _AnsHUMAN_

    does it not look as simple as tokenizing the strings on ',' and getting the last character of tokenized string to store in one array and the rest of the part in another after removing \r\n. If the last character is not a \n then only you need to add it to the array containing numbers.

    I am a HUMAN. I have that keyword (??? too much) in my name........ ;-)_AnsHUMAN_b>

    A Offline
    A Offline
    AbhiHcl
    wrote on last edited by
    #5

    can u please send me some sample code .

    1 Reply Last reply
    0
    • A AbhiHcl

      Thanx for ur reply, Can u please gv me some ssample code as I m new in c++.

      L Offline
      L Offline
      Lost User
      wrote on last edited by
      #6

      NO.

      ...byte till it megahertz...

      1 Reply Last reply
      0
      • A AbhiHcl

        Hi I have two char array which I need to fill by parsing the string. char * str = "1,aaa\r\n2,bbb\r\n3,ccc\r\n4,ddd\r\n" now the the first value(1,2,3,4 in this case ) has to fill in first array and second value(aaa,bbb,ccc,ddd in this case) has to fill in second array. Can anybody please help me how to do this. please provide me a sample code if possible. Thanks

        S Offline
        S Offline
        Sauro Viti
        wrote on last edited by
        #7

        As others already told you, the answer is tokenize the string alternating "," and "\r\n" as delimiters. Nobody will give you a sample nor will do the work for you; if you don't know how to tokenize a string, look at strtok, wcstok, _mbstok (CRT)[^]

        A 1 Reply Last reply
        0
        • S Sauro Viti

          As others already told you, the answer is tokenize the string alternating "," and "\r\n" as delimiters. Nobody will give you a sample nor will do the work for you; if you don't know how to tokenize a string, look at strtok, wcstok, _mbstok (CRT)[^]

          A Offline
          A Offline
          AbhiHcl
          wrote on last edited by
          #8

          its nothing like that I hv not tried, but some where I stucked , Here by I m putting my code what I hv done till nw. char* szStr = "2,aaa\r\n3,bbb\r\n4,ccc\r\n5,ddd\r\n6,eee\r\n" ; int len = strlen(szStr); char* tempstrlen = new char[len + 1 ]; char* tempstrst = new char[len + 1 ] ; char* tempstr1 = NULL ; char* tempstr2 = NULL ; int nlang[12] ; char* szTag[5] ; memset(tempstrlen,0x00,sizeof(char) * (len + 1)) ; memcpy(tempstrlen,szStr,sizeof(char) * len); memset(tempstrst,0x00,sizeof(char) * (len + 1)); memcpy(tempstrst,szStr,sizeof(char) * len) ; tempstr1 = tempstrlen ; tempstr1 = strtok(tempstrst,"\r\n"); // nlang[0] = atoi(tempstr1) ; szTag[0]= tempstr1 ; int nCount = 0 ; int nCountChar = 0 ; while((tempstrst != NULL) && (nCount != 4)) { tempstr1 = strtok(NULL,"\r\n"); szTag[nCount + 1]= tempstr1 ; nCount++ ; } int i = 0; char* txt = NULL ; for(i = 0 ;i < 5 ; i++ ); { txt = strtok(szTag[i],","); nlang[0] = atoi(txt) ; while(szTag!=NULL && i>=0) { txt = strtok(szTag[i],","); nlang[i] = atoi(txt); i++ ; } i++ ; } please go through that and tell me where I m going wrong.

          S D 2 Replies Last reply
          0
          • A AbhiHcl

            its nothing like that I hv not tried, but some where I stucked , Here by I m putting my code what I hv done till nw. char* szStr = "2,aaa\r\n3,bbb\r\n4,ccc\r\n5,ddd\r\n6,eee\r\n" ; int len = strlen(szStr); char* tempstrlen = new char[len + 1 ]; char* tempstrst = new char[len + 1 ] ; char* tempstr1 = NULL ; char* tempstr2 = NULL ; int nlang[12] ; char* szTag[5] ; memset(tempstrlen,0x00,sizeof(char) * (len + 1)) ; memcpy(tempstrlen,szStr,sizeof(char) * len); memset(tempstrst,0x00,sizeof(char) * (len + 1)); memcpy(tempstrst,szStr,sizeof(char) * len) ; tempstr1 = tempstrlen ; tempstr1 = strtok(tempstrst,"\r\n"); // nlang[0] = atoi(tempstr1) ; szTag[0]= tempstr1 ; int nCount = 0 ; int nCountChar = 0 ; while((tempstrst != NULL) && (nCount != 4)) { tempstr1 = strtok(NULL,"\r\n"); szTag[nCount + 1]= tempstr1 ; nCount++ ; } int i = 0; char* txt = NULL ; for(i = 0 ;i < 5 ; i++ ); { txt = strtok(szTag[i],","); nlang[0] = atoi(txt) ; while(szTag!=NULL && i>=0) { txt = strtok(szTag[i],","); nlang[i] = atoi(txt); i++ ; } i++ ; } please go through that and tell me where I m going wrong.

            S Offline
            S Offline
            Sauro Viti
            wrote on last edited by
            #9

            Try to work around this snippet:

            char *szStr = "2,aaa\r\n3,bbb\r\n4,ccc\r\n5,ddd\r\n6,eee\r\n";

            char *token1 = strtok(szStr, ",");
            char *token2 = strtok(NULL, "\r\n");

            // Get the first pair number/text from token1 and token2

            int n = 1;

            while (token1 != NULL && token2 != NULL && n < 5)
            {
            token1 = strtok(NULL, ",");
            token2 = strtok(NULL, "\r\n");

            // Get the n-th pair number/text from token1 and token2

            n++;
            }

            modified on Friday, August 6, 2010 7:49 AM

            L 1 Reply Last reply
            0
            • S Sauro Viti

              Try to work around this snippet:

              char *szStr = "2,aaa\r\n3,bbb\r\n4,ccc\r\n5,ddd\r\n6,eee\r\n";

              char *token1 = strtok(szStr, ",");
              char *token2 = strtok(NULL, "\r\n");

              // Get the first pair number/text from token1 and token2

              int n = 1;

              while (token1 != NULL && token2 != NULL && n < 5)
              {
              token1 = strtok(NULL, ",");
              token2 = strtok(NULL, "\r\n");

              // Get the n-th pair number/text from token1 and token2

              n++;
              }

              modified on Friday, August 6, 2010 7:49 AM

              L Offline
              L Offline
              Lost User
              wrote on last edited by
              #10

              wow. Thats ridden with so many flaws. The main one is using tokenizing on a const char*. Did you simply type that out here ?

              ...byte till it megahertz...

              S 2 Replies Last reply
              0
              • A AbhiHcl

                Thanx for ur reply, Can u please gv me some ssample code as I m new in c++.

                L Offline
                L Offline
                Lost User
                wrote on last edited by
                #11

                Well, because you have indeed attempted something, I'll help with a very very basic implementation.

                void Job()
                {
                char *data = strdup("1,aaa\r\n2,bbb\r\n3,ccc\r\n4,ddd\r\n");

                // count the dest array size
                char \*p = data;
                int n = 0;
                while(\*p)
                {
                	if('\\r' == \*p)
                	{
                		n++;
                		p++;
                	}
                	p++;
                }
                
                // create the dest arrays
                char \*\*text = new char\*\[n\];
                int \*nums = new int\[n\];
                
                // start splitting
                int i = 0;
                char \*tok = strtok(data, "\\r\\n");
                while(tok)
                {
                	char \*t = tok;
                	while(\*tok)
                	{
                		if(',' == \*tok)
                		{
                			\*tok = 0;
                			nums\[i\] = atoi(t);
                			t = tok+1;
                		}
                		tok++;
                	}
                	text\[i\] = strdup(t);
                	i++;
                	tok = strtok(NULL, "\\r\\n");
                }
                
                // clear all
                for(i = 0; i<n; i++)
                	free(text\[i\]);
                delete \[\] text;
                delete \[\] nums;
                free(data);
                

                }

                It is not recommended to play around with too many pointers. Use std::string and std::vector in place of arrays. And use strtok_s(...) instead of strtok(...) to reduce those loops into simple function calls. I am using VC6 which doesn't have that and hence have written out those loops.

                ...byte till it megahertz...

                1 Reply Last reply
                0
                • L Lost User

                  wow. Thats ridden with so many flaws. The main one is using tokenizing on a const char*. Did you simply type that out here ?

                  ...byte till it megahertz...

                  S Offline
                  S Offline
                  Sauro Viti
                  wrote on last edited by
                  #12

                  :-O It was lunch time and my stomach got the control over my brain! :laugh:

                  1 Reply Last reply
                  0
                  • L Lost User

                    wow. Thats ridden with so many flaws. The main one is using tokenizing on a const char*. Did you simply type that out here ?

                    ...byte till it megahertz...

                    S Offline
                    S Offline
                    Sauro Viti
                    wrote on last edited by
                    #13

                    Now it works properly:

                    char szStr[] = "2,aaa\r\n3,bbb\r\n4,ccc\r\n5,ddd\r\n6,eee\r\n";

                    char *token1 = strtok(szStr, ",");
                    char *token2 = strtok(NULL, "\r\n");

                    std::vector<int> nums;
                    std::vectorstd::string strings;

                    // Get the first pair number/text from token1 and token2
                    if (token1 != NULL && token2 != NULL)
                    {
                    nums.push_back(atoi(token1));
                    strings.push_back(token2);
                    }

                    while (token1 != NULL && token2 != NULL)
                    {
                    token1 = strtok(NULL, ",");
                    token2 = strtok(NULL, "\r\n");

                    // Get the n-th pair number/text from token1 and token2
                    if (token1 != NULL && token2 != NULL)
                    {
                    nums.push_back(atoi(token1));
                    strings.push_back(token2);
                    }
                    }

                    1 Reply Last reply
                    0
                    • A AbhiHcl

                      its nothing like that I hv not tried, but some where I stucked , Here by I m putting my code what I hv done till nw. char* szStr = "2,aaa\r\n3,bbb\r\n4,ccc\r\n5,ddd\r\n6,eee\r\n" ; int len = strlen(szStr); char* tempstrlen = new char[len + 1 ]; char* tempstrst = new char[len + 1 ] ; char* tempstr1 = NULL ; char* tempstr2 = NULL ; int nlang[12] ; char* szTag[5] ; memset(tempstrlen,0x00,sizeof(char) * (len + 1)) ; memcpy(tempstrlen,szStr,sizeof(char) * len); memset(tempstrst,0x00,sizeof(char) * (len + 1)); memcpy(tempstrst,szStr,sizeof(char) * len) ; tempstr1 = tempstrlen ; tempstr1 = strtok(tempstrst,"\r\n"); // nlang[0] = atoi(tempstr1) ; szTag[0]= tempstr1 ; int nCount = 0 ; int nCountChar = 0 ; while((tempstrst != NULL) && (nCount != 4)) { tempstr1 = strtok(NULL,"\r\n"); szTag[nCount + 1]= tempstr1 ; nCount++ ; } int i = 0; char* txt = NULL ; for(i = 0 ;i < 5 ; i++ ); { txt = strtok(szTag[i],","); nlang[0] = atoi(txt) ; while(szTag!=NULL && i>=0) { txt = strtok(szTag[i],","); nlang[i] = atoi(txt); i++ ; } i++ ; } please go through that and tell me where I m going wrong.

                      D Offline
                      D Offline
                      David Crow
                      wrote on last edited by
                      #14

                      AbhiHcl wrote:

                      its nothing like that I hv not tried, but some where I stucked...

                      Then use the debugger to find out where.

                      "One man's wage rise is another man's price increase." - Harold Wilson

                      "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                      "Man who follows car will be exhausted." - Confucius

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups