Program zamieniający wielkość znaków w C.

0

Witam,
miałem następujący problem, na zaliczeniu, tzn. bardziej ambitnie na pan da 4(żeby uniknąć programowania na sesji) pośród wielu programów trafił taki w którym miały być dwie funkcje - zmieniająca wielkość liter z wielkiej na małą i na odwrót - banał, tylko nie wiedziałem za bardzo jak zrobić, żeby funkcja zwracała tą tablice i druga, to zamieniająca ciąg znaków tak aby każde nowe słowo zaczynało się z wielkiej litery jak np. ALa mA KOtA -> Ala Ma Kota, albo też ALA%ma(KoTa) -> Ala%Ma(Kota). Tu miałem problem, wydaje mi się, że po najpierw trzeba wszystkie litery zmienić na małe, a później jeżeli znak poprzedzający dany znak(i-1), nie jest literą, a znak(i) jest małą literą to zmiana na dużą analogicznie jak w poprzedniej funkcji. Tylko nie bardzo wiem jak to napisać.
kod pierwszej funkcji:

int flip(  char *tab){
  int i;
  for(i=0;i<=strlen(tab);i++){
      if(tab[i]>='A'&&tab[i]<='Z')
       tab[i]=tab[i]+32;
      else 
      if(tab[i]>='a'&&tab[i]<='z')
       tab[i]=tab[i]-32;
  }
  printf("\nPo zamianie znakow: %s",tab);
  return 0;
  /*nie bardzo wiem jak edytowac kod, żeby zwracać ta tablice zamiast ja drukować, 
  no na pewno zaczac bym musial od zmiany na samym poczatku z int na char i pozniej chyba jakos ze wskaznikiem*/
}>

Z góry przepraszam, jeżeli to wiedza "zbyt" elementarna na ten dział, jednak liczę na waszą pomoc, bo nie daje mi to spokoju :D

0

Nie trzeba nic zwracać, skoro wysyłasz wskaźnik to działa na samej tablicy. Tak więc po wyjściu z funkcji tablica do niej wysłana będzie "przerobiona".

0

Możesz zrobić tak jak to robi strcpy()

char *flip(char *text)
  {
   // tu coś robisz
   return text;
  }

Co do pierwsze duże reszta małe. Tworzysz zmienną logiczną wewnątrz_słowa - do której wpisujemy zwykłe isalpha() ale zachowując poprzednią wartość. Jeżeli teraz wartość wewnątrz_słowa jest prawdą to trzeba coś zrobić, jeżeli poprzednia wartość wewnątrz_słowa była prawdą - zmieniamy na małe, było nie prawdą - zmieniamy na duże.

1 użytkowników online, w tym zalogowanych: 0, gości: 1