2016-12-14 4 views
1

ich versuche, einen bestimmten Charakter zu machen GroßGroß ein bestimmtes Zeichen durch den Benutzer in c gegeben

beispielsweise durch den Benutzer gegeben:

schreiben eine Phrase:

hallo meine Name ist John

wählen Sie einen Buchstaben in Großbuchstaben:

O

Ergebnis nach Groß:

Hallo mein Name ist JOhn

Nach meinen Untersuchungen i eine Funktion toupper mit ctype.h Bibliothek namens gesehen habe. Aber ich habe nicht verstanden, wie man es in meinem Fall benutzt.

Beispiel Code:

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 

void uppercase(char *s,char c) 
{ 
    toupper(c); 
} 

int main() 
{ 
    char s[1000]; 
    printf("write a phrase"); 
    fgets(s,1000,stdin); 

    printf("%s\n",s); 
    char c; 
    printf("choose a letter to uppercase"); 
    scanf("%c",&c); 
    printf("%c",c); 
    uppercase(*s,c); 

} 
+0

Hier ist ein [Manpage Verwendungsbeispiel] (https://msdn.microsoft.com/en-us/library/1t27bw1z. aspx) für 'toupper'. –

+1

Wie würden Sie in Ihrem Beispiel alle Orte von "o" oder "O" finden? Wenn Sie herausfinden können, wo das Zeichen ist, sollten Sie in der Lage sein, herauszufinden, wie toupper – thurizas

Antwort

0

durch den Strang Go s eine for Schleife (und strlen()), in der Zeichenfolge zu überprüfen, ob das Zeichen das Zeichen durch den Benutzer gegeben einstimmt (if (s[i] == c)) und ändern Sie ihn auf Großbuchstaben (s[i] = toupper(s[i])

1

Es ist besser, wenn String-Funktionen Zeiger auf die Zielzeichenfolge zurückgeben. So sollte die Funktion wie

char * uppercase(char *s, char c); 

Die Funktionsdefinition deklariert werden kann aussehen folgendermaßen

char * uppercase(char *s, char c) 
{ 
    for (char *p = s; *p != '\0'; ++p) 
    { 
     if (*p == c) *p = toupper((unsigned char)*p); 
    } 

    return s; 
} 

Oder zum Beispiel kann die Funktion die folgende Art und Weise

char * uppercase(char *s, char c) 
{ 
    for (char *p = s; (p = strchr(p, c)) != NULL; ++p) 
    { 
     *p = toupper((unsigned char)*p); 
    } 

    return s; 
} 

definiert werden Ein weiterer Ansatz ist Damit die Funktion mehrere Zeichen gleichzeitig ändern kann. Hier ist ein demonstratives Programm

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 

char * uppercase(char *s1, const char *s2) 
{ 
    for (size_t i = 0; s1[i += strcspn(s1 + i, s2)] != '\0'; i++) 
    { 
     s1[i] = toupper((unsigned char)s1[i]); 
    } 

    return s1; 
} 

int main(void) 
{ 
    char s[] = "hello my name is John"; 

    puts(s); 
    puts(uppercase(s, "hmn")); 
} 

Die Programmausgabe ist

hello my name is John 
Hello My NaMe is JoHN 
+0

ich bin auf Eclipse für Ubuntu ausgeführt, so dass ich Char * p außerhalb von für (char * p = s; * p! = '\ 0'; ++ p) wie dieses char * Großbuchstaben (char * s, char c) { \t char * p; für (* p = s; * p!= '\ 0'; ++ p) { wenn (* p == c) * p = toupper ((vorzeichenloses Zeichen) * p); } Rücksendung s; } nachdem meine Großbuchstabe-Funktion erledigt ist, möchte ich, dass meine Hauptfunktion mir das Ergebnis gibt, also fügte ich ein printf nach Großbuchstaben hinzu (s, c); aber ich habe kein ergebnis? –

+0

@CanOnder Ist s in main als ein Array oder wie ein Zeiger definiert? –

+0

Wie die 'strchr(), strcspn()'. – chux

Verwandte Themen