Char - Leerzeichen durch Bindestrich ersetzen



  • Hey Community,
    Ich schreibe gerade mein erstes Programm in C. Das Funktioniert alles auch wunderbar wie ich es mir vorgestellt habe. Jedoch bekomme ich eine Sache nicht wirklich in. Ich würde gerne in einer char Variable, alle Leerzeichen durch Bindestriche ersetzen. Leider haben mir sämtliche Lösungsansätze aus anderen Diskussionen nicht weitergeholfen.
    Sodass ich immer wieder bei 0-Angefangen habe und es einfach nicht hinbekommen.
    Habt ihr eine Idee wie dies umzusetzten ist? (Bei sämtlichen Lösungsvorschlägen aus dem Internet wurden immer strings benutzt. Mein Compiler brachte aber immer Fehlermeldungen wie: string ist nicht deklariert etc.)
    lg vipe



  • Wenn du es in reinem C lösen willst, benutze am besten die Befehle strchr und memset. Damit gehts. Beide sind aus string.h

    http://www.cplusplus.com/reference/clibrary/cstring/



  • Strings gibt es in C ( noch ) nicht so wie wir es aus C++ oder einigen anderen Sprachen kennen.

    http://www.inf.uni-konstanz.de/cgip/lehre/algodat_05/carraysh.pdf

    Aber, wenn du das mit Chat-Arrays angehen möchtest:
    http://www.cplusplus.com/reference/clibrary/cstring/strncpy/
    http://www.cplusplus.com/reference/clibrary/cstring/strncat/

    und weitere.

    MfG f.-th.



  • 😡 Chat-Arrays -> hoffentlich besser: Char-Arrays 😃

    MfG f.-th.



  • hey super, danke ich komme dem schon näher.
    Was ich jetzt hinbekommen habe, ist eine Liste:

    Looking for the ' ' character in "This is a sample string"...
    -----is a sample string
    --------a sample string
    ----------sample string
    -----------------string

    Das bedeutet er findet schonmal die Leerzeichen, und ersetzt bis zum Leerzeichen mit Bindestrichen.

    char str[] = "This is a sample string";
      char * pch;
      printf ("Looking for the ' ' character in \"%s\"...\n",str);
      pch=strchr(str,' ');
      while (pch!=NULL)
      {
        //printf ("found at %d\n",pch-str+1);
        //pch=strchr(pch+1,'s');
        memset (str,'-',pch-str+1);
        puts (str);
        pch=strchr(pch+1,' ');
      }
    

    Aber wie mach ich da jetzt weiter? (Theoretisch: Bindestriche nur fürs Leerzeichen, sowie alles auf eine einzige char anwenden)
    lg und übrigens frohe weihnachten 😛
    vipe



  • #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    	char buf[64];
    	int i;
    
    	sprintf(buf, "Wo sollte das Problem liegen???");
    
    	for (i = 0; i < strlen(buf); ++i)
    	{
    		if (buf[i] == ' ')
    		{
    			buf[i] = '-';
    		}
    	}
    
    	printf("%s\n", buf);
    
    	return 0;
    }
    

    Und hier noch eine alternative Umsetzung mit Funktion:

    #include <stdio.h>
    #include <string.h>
    
    void Replace(char *str, char ch_search, char ch_replace);
    
    int main()
    {
    	char buf[64];
    	int i;
    
    	sprintf(buf, "Wo sollte das Problem liegen???");
    
    	Replace(buf, ' ', '-');
    
    	printf("%s\n", buf);
    
    	return 0;
    }
    
    void Replace(char *str, char ch_search, char ch_replace)
    {
    	int i;
    	int len = strlen(str);
    
    	for (i = 0; i < len; ++i)
    	{
    		if (str[i] == ch_search)
    		{
    			str[i] = ch_replace;	
    		}
    	}
    }
    

    Wo liegt also dein Problem?



  • while (pch!=NULL)
      {
        *pch = '-';
        /* gleichbedeutend mit pch[0] = '-'; */
        puts (str);
        pch=strchr(pch+1,' ');
      }
    


  • #include <stdio.h>
    #include <string.h>
    
    // Suchen & Ersetzen
    const char SEARCH = ' ';
    const char REPLACE = '-';
    
    int main()
    {
    	char str[] = "This is a sample string";
    
    	char * pch;
    
    	printf ("Looking for the '%c' character in \"%s\"...\n", SEARCH, str);
    
    	pch = strchr(str, SEARCH);
    
    	while (pch != NULL)
    	{
    		if (*pch == SEARCH)
    		{
    			*pch = REPLACE;
    		}
    
    		pch=strchr(pch + 1, SEARCH);
    	}
    
    	printf("%s\n", str);
    
    	return 0;
    }
    


  • okay super danke - die Lösung von kkkkljkljk funktioniert super 🙂
    Danke 🙂



  • Versuch die Lösung auch zu verstehen.
    Das sind ganz wichtige C Grundlagen.

    Wobei kkkkljkljk das ganze noch sehr Anfängerfeundlich ausgedrückt hat :xmas1:


Anmelden zum Antworten