C Bestimmtes Zeichen in einem String zählen

Crazy Driver

Ensign
Dabei seit
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?
 

antred

Lt. Commander
Dabei seit
Juni 2010
Beiträge
1.288
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. ;)
 

fRaNkLiN

Lt. Junior Grade
Dabei seit
Aug. 2005
Beiträge
503
Nein, stupides Werte abgleichen:
PHP:
if (string[i] == 'Y') { anzahl++; }
 

NamenIos

Lieutenant
Dabei seit
Dez. 2005
Beiträge
620
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 :(
 

Liberator

Lt. Junior Grade
Dabei seit
Juli 2009
Beiträge
307
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:
 

Crazy Driver

Ensign
Ersteller dieses Themas
Dabei seit
Jan. 2011
Beiträge
182
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
 

[GP] mino

Lt. Commander
Dabei seit
März 2009
Beiträge
1.904
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');

..
 

Selenim

Cadet 1st Year
Dabei seit
Nov. 2010
Beiträge
11
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;
}
 

antred

Lt. Commander
Dabei seit
Juni 2010
Beiträge
1.288
Zitat von [GP] mino:
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.
 

IceMatrix

Lt. Commander
Dabei seit
Jan. 2008
Beiträge
1.535
Zitat von Crazy Driver:
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;
}
 

[GP] mino

Lt. Commander
Dabei seit
März 2009
Beiträge
1.904
@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');

..
 

antred

Lt. Commander
Dabei seit
Juni 2010
Beiträge
1.288
Aber das wäre ja C++. Laut Thread-Titel arbeitet er mit C. Es sei denn, er ist sich des Unterschieds nicht bewußt ...
 

Crazy Driver

Ensign
Ersteller dieses Themas
Dabei seit
Jan. 2011
Beiträge
182
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!
 

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
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.
 

Crazy Driver

Ensign
Ersteller dieses Themas
Dabei seit
Jan. 2011
Beiträge
182
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:

antred

Lt. Commander
Dabei seit
Juni 2010
Beiträge
1.288
Zitat von asdfman:
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.
 

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
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:
Top