ROZWIĄZANIA  PRZYKŁADOWYCH  ZADAŃ
ilustrujących pisanie funkcji przetwarzających teksty

ZADANIE_1    Napisz funkcję, USUN_MALE, która usuwa wszystkie małe litery
z łańcucha znaków podawanego jako argument wejściowy tej funkcji.

ZADANIE_2    Napisz funkcję POROWNAJ_ILOSCI sprawdzającą czy w tekście podanym jako argument
znajduje się więcej małych czy dużych liter. W zależności od rezultatów porównania,
funkcja powinna zwrócić liczbę: dodatnią, ujemną lub zerową.

ZADANIE_3    Napisz funkcję USUN_WIELOKROTNE, usuwającą wszystkie wielokrotne spacje
z tekstu podawanego jako parametr.

ZADANIE_4    Napisz funkcję UsunPierwszyMinus
usuwającą (poprzez skrócenie tekstu) pierwsze wystąpienie znaku minus '-'
z łańcucha znaków przekazywanego jako parametr wejściowy tej funkcji.

ZADANIE_5    Napisz funkcję Dodaj5spacji dodającą 5 spacji na początku tekstu
przekazywanego jako parametr wejściowy tej funkcji.

ZADANIE_6    Napisz funkcję UsunKomentarz usuwającą z tekstu przekazywanego jako parametr
całą końcową część poczynając od znaków początku komentarza "//".

ZADANIE_7    Napisz funkcję CzyJestTxt sprawdzającą czy tekst przekazywany jako parametr tej funkcji
kończy się literami ".txt" (tak jak nazwy plików tekstowych).


  1. Napisz funkcję, USUN_MALE, która usuwa wszystkie małe litery
    z łańcucha znaków podawanego jako argument wejściowy tej funkcji.

char* USUN_MALE_1( char t[ ] )
{
  int i=0;
  while( t[i]!='\0' )
    if( t[i]>='a' && t[i]<='z' )
      strcpy( &t[i], &t[i+1] );
    else
      i++;
  return t;
}

 

// druga (szybciej działająca) wersja tej samej funkcji 

 

char* USUN_MALE_2( char t[ ] )
{
  int i=0, j=0;
  while( t[i]!='\0' )
    if( t[i]>='a' && t[i]<='z' )
      i++;
    else
      t[j++] = t[i++];
  t[j] = '\0';
  return t;
}

  1. Napisz funkcję POROWNAJ_ILOSCI sprawdzającą czy w tekście podanym jako argument wejściowy
    znajduje się więcej małych czy dużych liter. W zależności od rezultatów porównania,
    funkcja powinna zwrócić liczbę: dodatnią, ujemną lub zerową
    ( podobnie jak funkcja porównująca łańcuchy strcmp )

int POROWNAJ_ILOSCI( char t[ ] )
{
  int licz_malych=0, licz_duzych=0;
  for( int i=0; t[i]!='\0' ; i++ )

    {
      if( t[i]>='a' && t[i]<='z' )
        licz_malych++;
      if( t[i]>='A' && t[i]<='Z' )
        licz_duzych++;

    }
  return licz_malych - licz_duzych;
}
 

 

 

#include <stdio.h>
using namespace std;

int main()              // przykładowe wywołanie w/w funkcji

{                      // z tekstem wczytywanym z klawiatury

  char tekst[100];
  printf("Podaj tekst do sprawdzenia: ");
  gets(tekst);         // fgets(tekst,100,stdin);

  int wynik = POROWNAJ_ILOSCI(tekst);

  if
( wynik>0 )

    printf("wiecej malych liter\n");

  else if( wynik<0 )

    printf("wiecej duzych liter\n");

  else

    printf("jest tyle samo malych i duzych liter\n";

  return 0;

}

 

  1. Napisz funkcję USUN_WIELOKROTNE, usuwającą wszystkie wielokrotne spacjene spacjebr> z tekstu podawanego jako parametr.

char* USUN_WIELOKROTNE( char t[ ] )
{
  if( t[0]=='\0' )
    return t;
  int i=1;
  while( t[i]!='\0' )
    if( t[i]==' ' && t[i+1]==' ' )
      strcpy( &t[i+1], &t[i+2] );
    else
      i++;
  return t;

 

  1. Napisz funkcję usuwającą (poprzez skrócenie tekstu)
    pierwsze wystąpienie znaku minus '-'
    z łańcucha znaków przekazywanego jako parametr wejściowy tej funkcji.

#include <string.h>

 

void UsunPierwszyMinus(char t[])
{
  int pozycja=0;

  //szukanie znaku '-'
  while( t[pozycja]!=0 && t[pozycja]!='-' )
    pozycja++;

  //usuwanie (jezeli znaleziono)
  if( t[pozycja]=='-' )
    strcpy( &t[pozycja], &t[pozycja+1] );
}

 

  1. Napisz funkcję dodającą 5 spacji na początku tekstu
    przekazywanego jako parametr wejściowy tej funkcji.

#include <string.h>

 

void Dodaj5spacji(char t[])
{
  //przesuniecie wszystkich liter o 5 pozycji w prawo
  memmove( t+5, t, strlen(t)+1 );

  //wypełnienie wolnych miejsc spacjami
 
for(int i=0; i<5; i++)
    t[i]=32;
}
 

 

  1. Napisz funkcję usuwającą z tekstu przekazywanego jako parametr
    całą końcową część poczynając od znaków początku komentarza "//".

#include <string.h>

 

void UsunKomentarz(char t[])
{

  //wyszukanie pozycji znaków komentarza
  char* wsk;
  wsk=strstr(t,"//");

  //obciecie tekstu od znalezionej pozycji
  if( wsk!=NULL )
    *wsk=0;
}
 

 

  1. Napisz funkcję sprawdzającą czy tekst przekazywany jako parametr tej funkcji
    kończy się literami ".txt" (tak jak nazwy plików tekstowych)

#include <string.h>

 

int CzyJestTxt(char nazwa[])
{
  int dlugosc=strlen(nazwa);

  //zakonczenie, jeżeli nazwa ma mniej niż 4 litery
  if( dlugosc<4 )
    return 0;     //return false

  //sprawdzenie czy ostatnie 4 litery to ".txt"
  if( strcmp( nazwa+dlugosc-4, ".txt" ) == 0 )
    return 1;     //return true
  else
    return 0;
}