C Bestimmtes Zeichen in einem String zählen

Crazy Driver

Ensign
Registriert
Jan. 2011
Beiträge
182
Hallo,

Gibt es eine String-Funktion mit der man ein bestimmtes Zeichen in einem String zählen lassen kann?

Mal ein Beispiel:

PHP:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    char string[] = "XxXxXxXxYYYYYYYYyyyyXxXxXxX";
    int anzahl;

    anzahl = //String-Funktion (Zählt die Anzahl der 'Y')
    printf("Anzahl der Y in String: %d", anzahl);

    // weiterer Code ...

    return 0;
}
Die Variable 'anzahl' müsste den Wert 8 erhalten haben.
Gibt es da eine spezielle Funktion für?
 
Ich kenne keine Funktion in der C-Standardbibliothek, die das für dich tun würde. Du müßtest dir also selbst eine schreiben, aber so fordernd sollte das ja wohl nicht sein. ;)
 
Nein, stupides Werte abgleichen:
PHP:
if (string[i] == 'Y') { anzahl++; }
 
Die Funktion braucht Stringlänge und String dann den Wert(!) vergleichen mit dem ascii code für Y und die Adresse hochzählen.

edit zu spät :(
 
Du gehst mit ner while-Schleife den ganzen String durch, vergleichst (über ne if-Anweisung) Zeichen für Zeichen mit deinem "Ziel-Zeichen" und wenns zuammen passt erhöhst du deinen Zähler dafür.

Edit: ihr seit aber fix :rolleyes:
 
Gut danke! Dann mach ich das so:

1. String in Zeichen zerteilen
2. Jedes Zeichen prüfen, ob = 'Y'
3. Wenn ja, dann Zähler += 1
4. Zähler ausgeben
 
Code:
unsigned int countchars(const char *in, int size, char c)
{
	unsigned int count = 0;
	for (unsigned int i = 0; i < size; i++)
		if (in[i] == c) count ++;
	return count;
}

int main( int argc, char **argv )
{

	char string[] = "XxXxXxXxYYYYYYYYyyyyXxXxXxX";
	int anzahl = countchars(string, sizeof(string), 'X');

..
 
Nein, aber

PHP:
int Anzahl_funk(char *string,char testchar)
{
    int i = 0,
         sum  = 0
         string_size = strlen(string);

    While((i < string_size)
    {
         if(*(string+i) == testchar)
            sum++;
    }
    return sum;
}
 
[GP] mino schrieb:
Code:
unsigned int countchars(const char *in, int size, char c)
{
	unsigned int count = 0;
	for (unsigned int i = 0; i < size; i++)
		if (in[i] == c) count ++;
	return count;
}

Der Konsistenz wegen sollte dein 'size'-Parameter auch vom Typ unsigned int sein. :) Noch besser wäre für Parameter und Rückgabewert size_t.
 
Crazy Driver schrieb:
1. String in Zeichen zerteilen
wie genau ist denn das gemeint??

die aufgabe ist eigentlich denkbar einfach.. die (schnellste) lösung ist:


PHP:
#include <stdio.h>
#include <stdlib.h>

static int countchr(const char *str, char ch) {
   int count = 0;
   while (*str != '\0') {
      if (*str++ == ch) {
         count++;
      }
   }
   return count;
}

int main()
{
    char string[] = "XxXxXxXxYYYYYYYYyyyyXxXxXxX";
    int anzahl;

    anzahl = countchr(string, 'A'); /* z.B. 'A' als character */
    printf("Anzahl der Y in String: %d", anzahl);

    // weiterer Code ...

    return 0;
}
 
@Crazy Driver
in einem vorherigen thread schriebst du, dass du VS2010 nutzt.

wieso machst dir dann das leben so schwer und nutzt nicht die ganzen möglichkeiten als das rad immer neu zu erfinden?

Code:
#include <string>

int main( int argc, char **argv )
{

	std::string s = "XxXxXxXxYYYYYYYYyyyyXxXxXxX";
	int num = std::count(s.begin(), s.end(), 'X');

..
 
Aber das wäre ja C++. Laut Thread-Titel arbeitet er mit C. Es sei denn, er ist sich des Unterschieds nicht bewußt ...
 
Ich kenne die Unterschiede zwischen C und C++.
Die Lösung von [GP] mino finde ich auch sehr gut!
Ich gedenke also mein C-Programm in C++ umzuprogrammieren!
 
Wegen dieser Kleinigkeit, die man in einem Einzeiler lösen kann, willst du gleich mal die ganze Sprache
über den Haufen werfen und dein Programm in einer anderen neu schreiben? Verstehe ich nicht.
 
Wegen dieser Kleinigkeit, die man in einem Einzeiler lösen kann, willst du gleich mal die ganze Sprache
über den Haufen werfen und dein Programm in einer anderen neu schreiben? Verstehe ich nicht.
In meinem Fall macht es keine so großen Unterschiede, ob ich C oder C++
für mein Programm verwende. Ich habe auch kaum richtig angefangen. ;)

In dem Beispiel von [GP] mino fehlt übrigends noch die Bibliothek <algorithm>!
 
Zuletzt bearbeitet:
asdfman schrieb:
Wegen dieser Kleinigkeit, die man in einem Einzeiler lösen kann, willst du gleich mal die ganze Sprache
über den Haufen werfen und dein Programm in einer anderen neu schreiben? Verstehe ich nicht.

Also wenn man nicht aus irgend einem Grund unbedingt in C programmieren muß, fährt man doch eigentlich mit C++ immer besser.
 
Das kann man nicht grundsätzlich so sagen.
Eine Sprache ist ein Mittel zum Zweck und entsprechend sollte man sie auswählen.
Nicht umsonst ist C so weit verbreitet. Wenn C++ immer besser wäre, würde C ja
keiner benutzen oder?

€: Hier wahllos was gegoogelt und in der Statistik liegen C und C++ quasi gleichauf:
http://wismuth.com/lang/languages.html
 
Zuletzt bearbeitet:
Zurück
Oben