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. Problem using strings

Problem using strings

Scheduled Pinned Locked Moved C / C++ / MFC
helpasp-netcomquestion
18 Posts 11 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.
  • L Lost User

    Try this:

    char* my_strdelupper(char* s){
    int i, len;
    char* sl;

    len = strlen(s);
    sl = (char\*)malloc(len+1); // space for the converted string
    i = 0; // index to the converted string buffer
    while (\*s != '\\0'){
        if (!isupper(\*s)){
            sl\[i++\] = \*s; // copy lower case letters
        }
        s++;
    }
    sl\[i\] = '\\0';
    printf("%s\\n", sl);
    
    return sl;
    

    }

    R Offline
    R Offline
    Rodrigo Lourenco
    wrote on last edited by
    #9

    The stupid thing is that I can't use malloc, so I made a char array with fixed size to overcame that problem.

    1 Reply Last reply
    0
    • D David Crow

      If I were to hazard a guess, I'd say it has to do with aux being destroyed (i.e., going out of scope) once my_strdelupper() returns.

      "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

      "You can easily judge the character of a man by how he treats those who can do nothing for him." - James D. Miles

      R Offline
      R Offline
      Rodrigo Lourenco
      wrote on last edited by
      #10

      I think you are correct, but I tried to copy aux to s and didn't work, now I changed the code to send an array, them befour I leave I copy using srtcpy aux to s, and it's working.

      1 Reply Last reply
      0
      • K k5054

        You have: char *s3 = "...". Although s3 is declared as char * the type of the string is const char *. Use char s3[] = "..." instead.

        R Offline
        R Offline
        Rodrigo Lourenco
        wrote on last edited by
        #11

        It worked thanks

        1 Reply Last reply
        0
        • R Rodrigo Lourenco

          I'm trying to change a given string in a function, but I send a string, try to change it directly and get a core dump, so I tried to create a string in the function, but it doesn't send the correct string. This function must eliminate all Capital letter's it's a simple one, but I am making a mistake and don't see where. Can any one help me please.

          #include #include #include #include #define false 1
          #define true 0

          char* my_strdelupper(char* s){

            int i,j, len;
            char aux\[100\];
            char debuging;
          
            len = strlen(s);
            j = 0;
            for (i = 0; \*(s + i) != '\\0' < len; i++){
                if (!isupper(\*(s+i))){
                    printf("%c",\*(s+i));
                    debuging = \*(s + i);
                    \*(aux + j) = debuging;
                   j++;
                }
            }
            \*(aux + j) = '\\0';
            printf("\\n");
            puts(aux);
          
            return strcpy(aux, aux);
          

          }

          int main()
          {
          char *s3="Quem quer casar com um programador?";
          printf("%s\n",my_strdelupper(s3)); /* aria, sabes que é s o meu "rande mor " */

          return 0;
          }

          R Offline
          R Offline
          Rodrigo Lourenco
          wrote on last edited by
          #12

          Thank you, for all, it was a great help. The problem was solved by:

          #include #include #include #include #define false 1
          #define true 0

          char* my_strdelupper(char* s){

            int i,j, len;
            char aux\[100\];
            char debuging;
          
            len = strlen(s);
            j = 0;
            for (i = 0; \*(s + i) != '\\0'; i++){
                if (!isupper(\*(s+i))){
                    debuging = \*(s + i);
                    \*(aux + j) = debuging;
                   j++;
                }
            }
            \*(aux + j) = '\\0';
          
            strcpy(s, aux);
            return s;
          

          }

          int main()
          {
          char s3[]="Maria, TU sabes que TU éS o meu \"Grande Amor\"";
          printf("%s\n",my_strdelupper(&s3[0])); /* aria, sabes que é s o meu "rande mor " */

          return 0;
          }

          J CPalliniC 2 Replies Last reply
          0
          • R Rodrigo Lourenco

            Thank you, for all, it was a great help. The problem was solved by:

            #include #include #include #include #define false 1
            #define true 0

            char* my_strdelupper(char* s){

              int i,j, len;
              char aux\[100\];
              char debuging;
            
              len = strlen(s);
              j = 0;
              for (i = 0; \*(s + i) != '\\0'; i++){
                  if (!isupper(\*(s+i))){
                      debuging = \*(s + i);
                      \*(aux + j) = debuging;
                     j++;
                  }
              }
              \*(aux + j) = '\\0';
            
              strcpy(s, aux);
              return s;
            

            }

            int main()
            {
            char s3[]="Maria, TU sabes que TU éS o meu \"Grande Amor\"";
            printf("%s\n",my_strdelupper(&s3[0])); /* aria, sabes que é s o meu "rande mor " */

            return 0;
            }

            J Offline
            J Offline
            jschell
            wrote on last edited by
            #13

            As a note - you define 'len' but you don't use it. Presumably the assignment does not say otherwise, using that would make your code simpler.

            1 Reply Last reply
            0
            • R Rodrigo Lourenco

              Thank you, for all, it was a great help. The problem was solved by:

              #include #include #include #include #define false 1
              #define true 0

              char* my_strdelupper(char* s){

                int i,j, len;
                char aux\[100\];
                char debuging;
              
                len = strlen(s);
                j = 0;
                for (i = 0; \*(s + i) != '\\0'; i++){
                    if (!isupper(\*(s+i))){
                        debuging = \*(s + i);
                        \*(aux + j) = debuging;
                       j++;
                    }
                }
                \*(aux + j) = '\\0';
              
                strcpy(s, aux);
                return s;
              

              }

              int main()
              {
              char s3[]="Maria, TU sabes que TU éS o meu \"Grande Amor\"";
              printf("%s\n",my_strdelupper(&s3[0])); /* aria, sabes que é s o meu "rande mor " */

              return 0;
              }

              CPalliniC Offline
              CPalliniC Offline
              CPallini
              wrote on last edited by
              #14

              Note you don't need extra storage, the function may change the string in place:

              char * remove_upper( char * s)
              {
              char * p, *q;

              for (p = q = s; *p != '\0'; ++p)
              if ( ! isupper(*p) )
              *q++ = *p;

              *q = '\0';
              return s;
              }

              In testa che avete, signor di Ceprano?

              P J 2 Replies Last reply
              0
              • CPalliniC CPallini

                Note you don't need extra storage, the function may change the string in place:

                char * remove_upper( char * s)
                {
                char * p, *q;

                for (p = q = s; *p != '\0'; ++p)
                if ( ! isupper(*p) )
                *q++ = *p;

                *q = '\0';
                return s;
                }

                P Offline
                P Offline
                Peter_in_2780
                wrote on last edited by
                #15

                Taken from K&R 1st ed? Certainly has that feel> :laugh: ;P

                Software rusts. Simon Stephenson, ca 1994. So does this signature. me, 2012

                CPalliniC 1 Reply Last reply
                0
                • P Peter_in_2780

                  Taken from K&R 1st ed? Certainly has that feel> :laugh: ;P

                  Software rusts. Simon Stephenson, ca 1994. So does this signature. me, 2012

                  CPalliniC Offline
                  CPalliniC Offline
                  CPallini
                  wrote on last edited by
                  #16

                  It is the Wonderful C programming language, of course has such a feel. In any case, were Dennis and Brian the ones who plagiarized my programs. :-D

                  In testa che avete, signor di Ceprano?

                  1 Reply Last reply
                  0
                  • V Victor Nijegorodov

                    Why not using the std::string with all its and other std methods? :zzz: :confused:

                    M Offline
                    M Offline
                    Member_14494321
                    wrote on last edited by
                    #17

                    As I have not clear idea about the std but yes this library used in most of the cases. [Fixed] Dell Printer Error 016 302 | Error Code 0x[^] helped me to get the solution.

                    1 Reply Last reply
                    0
                    • CPalliniC CPallini

                      Note you don't need extra storage, the function may change the string in place:

                      char * remove_upper( char * s)
                      {
                      char * p, *q;

                      for (p = q = s; *p != '\0'; ++p)
                      if ( ! isupper(*p) )
                      *q++ = *p;

                      *q = '\0';
                      return s;
                      }

                      J Offline
                      J Offline
                      John R Shaw
                      wrote on last edited by
                      #18

                      I was begging to think no one here was thinking. Thanks

                      INTP "Program testing can be used to show the presence of bugs, but never to show their absence." - Edsger Dijkstra "I have never been lost, but I will admit to being confused for several weeks. " - Daniel Boone

                      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