File I/O(aus Datei rauslesen)

C_Boy

Mitglied
Hallo,

Angabe:
Wandle den 1. Kleinbuchstaben in einen Großbuchstaben um der nach einem . kommt.
Also z.b: hallo.548du wird zu hallo.548Du.
Zwischen dem . und dem 1. Kleinbuchstaben sollen halt belieben zeichen stehn('#, ,?&% etc.)
Also nicht von der Textdatei ausgehn, das nach dem 8er ein Kleinbuchstaben kommt und so.

Also von Groß in Kleinbuchstaben umwandeln kann ich ja.
Auslesen und so auch kein problem.

C++:
if(text[n] >= 'a' && text[n] <='z')
{
   text[n] = text[n] -32;
}

Aber wie komme ich vom '.' aufm 1. Buchstaben?
Wie könnte das funktionieren?

MfG C_boy
 
Hi.

Du hast also 2 Zustände: Punkt gefunden, Punkt nicht gefunden.

Wenn du also auf einen Kleinbuchstaben triffst, und du bist im "Punkt gefunden" Zustand, dann wandelst du um und schaltest den "Punkt gefunden" Zustand aus.

Es gibt da übrigens so nette Funktion wie isupper und islower und toupper, tolower...

Gruß
 
Mhm ich weis net genau wie ich das machen soll.

C++:
  while(!feof(punkt))
  {
    fscanf(punkt,"%s",&tmp);

	if(tmp[i] == '.')
	{
	  if(tmp[i] >= 'a' && tmp[i] <= 'z')
	  {
	     tmp[i] = tmp[i] -32;
	  }
	}
  }

Naja hier wandelt es ja alle kleinen buchstaben um nach einem '.'
 
Hallo C_Boy,

du musst die Datei zeichenweise verarbeiten, also keinen String auslesen. Es könnten ja Leerzeichen oder Zeilenumbrüche im Text sein, so dass fscanf deshalb vorzeitig beendet. Wenn das gelesene Zeichen ein Punkt ist, dann merkst du dir das, indem du z.B. eine boolsche Variable auf 'true' setze. Wenn das gelesene Zeichen ein Kleinbuchstabe ist, dann prüfst du zuerst ob deine Merkervariable 'true' ist. Wenn ja, wandelst du das Zeichen in einen Großbuchstaben um und setzt die Merkervariable auf 'false'. In allen anderen Fällen bleibt das Zeichen unverändert.

Hmm, jetzt habe ich mit etwas anderen Worten nochmal die Antwort von deepthroat wiederholt...

Gruß
MCoder
 
Zurück