String bearbeiten



  • Wenn Du was mit "strdup" allokiert hast, musst Du es mit "free" freigeben!



  • Wieso'n das? 😕



  • Hmm... die einfachste Erklärung ist immer:
    WEIL ES IN DER DOKU STEHT!



  • Danke erst mal für die genazen Antworten ich hab mir jetzt meine eigene Funktion geschrieben.

    #include <iostream>
    #include <stdio.h>
    
    using namespace std;
    
    string a;
    
    void down(int i,int L,bool inside)
    {
        if(inside==true)
        {i++;}
        else
        {i++;}
    
        for(int x=i;x<=L;x++)
        {
            if(a[x]!=' ')
            {
                if(a[x]<=90 && a[x]>=65)
                {
                    a[x]=a[x]+32;
                }
            }
        }
    }
    
    void charwork(char *letter)
    {
        a =letter;
        int L= a.length(),Zusatz=0;
        for(int i=0;i<=L;i++)
        {
            Zusatz=i;
            if(a[i]==' ')
            {
                Zusatz++;
                if(a[Zusatz]<=122 && a[Zusatz]>=97)
                {
                   a[Zusatz]=a[Zusatz]-32;
                   down(Zusatz,L,true);
                }
            }
            if(i==0 && a[i]<=122 && a[i]>=97)
            {
                 a[i]=a[i]-32;
                 down(i,L,false);
            }
        }
        cout <<a<<endl;
    }
    int main(int argc, char *argv[])
    {
         charwork("  hAllO du AAa");
    
        system("PAUSE");
        return 0;
    }
    


  • String Bearbeiten schrieb:

    if(inside==true)
    {i++;}
    else
    {i++;}
    

    Sehr sinnreich - eine if-else macht nur dann Sinn, wenn in beiden Blöcken etwas unterschiedliches steht. Und anstatt dir etwas eigenes zusammenzuschustern, solltest du lieber die vorgegebenen Funktionen toupper() und tolower() verwenden.



  • Ja vorher stand das noch was anderes drinn^^ und ich habs vergessen rauszunehmen



  • Jochen Kalmbach schrieb:

    Hmm... die einfachste Erklärung ist immer:
    WEIL ES IN DER DOKU STEHT!

    Hättest du mir einen Link oder Tip gegeben, wo sich diese Doku befindet,
    wäre folgende Bitte jetzt nicht extra gepostet worden: Gib mal Link pls.



  • http://msdn2.microsoft.com/en-us/library/y471khhc

    Because _strdup calls malloc to allocate storage space for the copy of strSource, it is good practice always to release this memory by calling the free routine on the pointer returned by the call to _strdup.



  • Generell sollte man sich merken bei der Speicherallokation niemals C und C++ zu mischen.

    #include <cctype>
    #include <algorithm>
    #include <string>
    
    void string_toupper(std::string& str) { std::transform(str.begin(), str.end(), str.begin(), static_cast<int (*)(int)>(std::toupper)); }
    void string_tolower(std::string& str) { std::transform(str.begin(), str.end(), str.begin(), static_cast<int (*)(int)>(std::tolower)); }
    

    soll man so nicht machen ... aber nja was solls 😛
    So ... das direkt dann in unserer neuen, tollen Funktion nutzen um jeden Buchstaben im Satzanfang groß zu machen 🙂

    void string_first_upper(std::string& str)
    {
        string_tolower(str);
        for (std::size_t i(0); i < str.length(); ++i)
            if ((i == 0 || str[i - 1] == ' ') && str[i] >= 'a' && str[i] <= 'z') str[i] = 'A' + str[i] - 'a';
    }
    

    oh da war ich aber plemplem 😛 Die Funktion kann natürlich anders lauten:

    void string_first_upper(std::string& str)
    {
        string_tolower(str);
        for (std::size_t i(0); i < str.length(); ++i)
            if (i == 0 || str[i - 1] == ' ') std::toupper(str[i]);
    }
    


  • Meine Version

    void GeileFunktion(char *String)
    {
        bool bJetzt;
        String[0]=toupper(String[0]); //Sätze fangen ja groß an
        for(int i=0;i<(int)(strlen(String));i++)
        {
            if(String[i]==' ' || String[i]=='\n' || String[i]=='\t' || String[i]=='.' || String[i]=='?' || String[i]=='!')
                bJetzt=true;
            else
                bJetzt=false;
            String[i+1]= bJetzt?toupper(String[i+1]):tolower(String[i+1]);
        }
    }
    

    Ob die Wörter wirklich Substabtive sind ist eine andere Sache 😉


Anmelden zum Antworten