[C ] brauche kein code, nur ein tipp bzw anhaltspunkt

AlterMann

Cadet 4th Year
Registriert
Nov. 2012
Beiträge
123
hallo,
Möchte eine Aufgabe lösen, komm aber nicht auf einen lösungsweg.
Also , man soll ein Wort eingeben können und diesen auch ausdrucken.
dies ist ja noch einfach. Aber anschliessend soll das erste mehrfach im Wort vorkommende Zeichen sowie seine erste
und zweite Position ausgegeben werden.
Das ist mir ein Rätsel . Ich hab mir alles überlegt. Mit pointer, mit funktion, mit einer for schleife , mit einer while schleife.
Einfach alles. Ich komme nicht zum Ziel.
Brauche dringend tipps.
 
Naja, die simple Methode: Du liest das erste Zeichen, speicherst es irgendwo zwischen und suchst weiter, ob du es nochmal findest. Dann gehst du zum nächsten.
 
k danke
Ergänzung ()

kannst du mir das weiter suchen nochmal näher beschreiben?
erste zeichen wurde gelesen und auch wo gespeichert.
soll ich jetzt das zeichen schon vergleichen mit den andern? oder was meinst du mit suchen genau?
 
eine schleife, die über alle Zeichen geht und eine weitere schleife, die über alle zeichen geht, außer dem zeichen der ersten schleife. Abbruchbedingung wenn schleife 1 = schleife 2

das bewegen über die zeichenkette geht am besten mit einem pointer, der das schöne \0 sucht
 
Du fängst an und durchsuchst die Eingabe von Zeichen 0 bis Länge(Eingabe). Dabei schaust du jeweils, was es für ein Zeichen ist, startest eine neue Schleife, wo dann ab dem Zeichen geschaut wird, ob die Eingabe noch so ein Zeichen enthält. In dem Fall werden die Positionen gespeichert / ausgegeben.
 
Zuletzt bearbeitet:
Um es noch einmal anders zu formulieren: Du pickst dir das i-te Zeichen aus dem Wort heraus und schaust nach, ob dieses Zeichen an einer Position zwischen i+1 und dem Ende des Wortes noch einmal vorkommt.

Ich hoffe, jetzt ist etwas dabei, was man so halbwegs versteht - in Code ist soetwas viel leicher zu formulieren. :freak:
 
for (i=0; i<length ; i++){
h=string;
while ( i == string[i+1]){
count++;
if (count < 3)
printf("Anzahl doppeltes Zeichen ist : %d und buchstabe ist : %c ",count,h);
else printf("Zeichen kommt mehr als 2 mal vor");}
i++;
}
funktioniert nicht , ich verstehs nicht..
 
Zeichen bei Zeichen durch das Wort durchgehen. Jedes Zeichen speichern in ein Array. Jedes neues zu überprüfendes Zeichen mit allen Zeichen im Array vergleichen. Falls gefunden, sind die beiden positionen die Array-Indexes, wo du es gefunden hast.
Bei Unklarheiten, kannst du ruhig wieder nachfragen...
 
Ich hab das so gelöst: Du gehst den String mit einer Schleife durch, untersuchst jedes Zeichen mit einer Funktion, wie oft es vorkommt, und wenn es öfter (als 1x) vorkommt, dann suchst du noch, wo dieses Zeichen das 2. mal vorkommt, speicherst das jeweils in Variablen und gibst es am Schluss aus.

Hier mal ne mögliche Lösung in Javascript: JSfiddle

Also entweder mein Code ist viel zu lang, oder es ist doch nicht ganz so trivial ;)
 
Zuletzt bearbeitet:
ok kingler, deins hört sich auch ganz gut an, nur meine frage jetzt:

int main() {

char string[61];
char *hilf=NULL;
int i,j,length,count=0;

printf("Geben Sie eine Wort <=60 : ");
gets_s(string);
printf("%s\n",string);
length=strlen(string);

for(i=0;i<=length;i++){
hilf=&string;
for(j=0;j<=length;j++)
if (*hilf == string[j]) count++;
}
printf("%d\n",count);
printf("%d\n",length);

system("pause");
}

warum gibt er mir bei der ausgabe bei count 8? wenn ich beispielsweise das wort hallo eingebe...
 
Was willste denn machen? Zählen, wie oft ein Zeichen in einem String vorkommt?
Code:
#include <stdio.h>
#include <string.h>

int count(char* string, char c)
{
    int count = 0, i;
    
    for (i = 0; i < strlen(string); i++)
    {
        if (string[i] == c) { count++; }
    }
    
    return count;
} 

int main()
{
    printf("%d\n", count("muh",'m'));
    
    return 0;
}
 
Zuletzt bearbeitet:
laut viking ge:
Um es noch einmal anders zu formulieren: Du pickst dir das i-te Zeichen aus dem Wort heraus und schaust nach, ob dieses Zeichen an einer Position zwischen i+1 und dem Ende des Wortes noch einmal vorkommt.

das wollte ich damit bezwecken..
 
pseudocode:
Code:
for(i=0; i< length;i++) {
   for(j=i+1;j<length;j++) {
      if(string[j] == string[i]) {
         print string[i], print i, print j;
         done;
      }
   }
}

Für Kingler

/e link angepasst.. hab da irgendwas mitm speichern verhaun
 
Zuletzt bearbeitet:
Ich muss nochmal schnell meckern: die Überschrift sagt leider gar nichts aus.
 
scanf ließt den input aus und schreibt ihn in eine string variable. der rückgabewert von scanf ist die länge des gelesenen strings. diese rückgabe musst du dir in einer variable speichern.

ein string ist ein pointer, kann man als: char a[10] oder char *a = "abcdefghij" schreiben.
ein pointer ist eine speicheradresse im ram wo es anfängt, wie weit es geht muss man sich merken, C ist es dabei egal ob du über das ende gehst ! speicheradressen, also pointer, lassen sich einfach erhöhen, also strPointer+1 zeigt auf den zweiten buchstaben, strPointer auf den ersten.

eine string variable ist also ein pointer auf den ersten buchstaben des strings im ram.
nun brauchst du nur drüber zu iterieren. strPointer+1, strPointer+2 ... bis strPointer+scanfReturn.
die kurzschreibweise dafür ist strPointer[0], strPointer[1]....der compiler erkennt dies und macht das obige, nimmt also den pointer und addiert das in den [] drauf.
 
Zuletzt bearbeitet:
black90 schrieb:
ein string ist ein pointer, kann man als: char a[10] oder char *a = "abcdefghij" schreiben.

Bitte const char a[10] oder const char *a = "abcdefghij" ... non-const-Pointer auf String-Literale sind pfui.
 
black90 schrieb:
der rückgabewert von scanf ist die länge des gelesenen strings.
FALSCH!
(<kleiner Seitenhieb>Hier noch ein paar weitere GROSSBUCHSTABEN, die Du in Zukunft wahlfrei in Deinen Postings verteilen kannst...</kleiner Seitenhieb>)

Zitat von http://www.cplusplus.com/reference/cstdio/scanf/:

"On success, the function returns the number of items of the argument list successfully filled."


HTH (oh, schon wieder GROSSBUCHSTABEN!)

BigNum
 
Zurück
Oben