Cześć
Mam problem z zadaniem o następującej treści:
Napisz funkcję, która będzie zamieniała wszystkie litery w przekazanym tekście na małe lub duże. Do zamiany litery na małą użyj funkcji to_lower, a na dużą to_upper - jeżeli modyfikacja nie będzie możliwa, funkcje powinny zwrócić przekazaną wartość.
Funkcje powinny mieć następujące prototypy:
char* change_letter_size(char *txt, enum letter_changer_t c)
char to_lower(char);
char to_upper(char);
Parametry:
txt - wskaźnik na tablicę znaków, której litery mają zostać zmodyfikowane,
c - wybór opcji modyfikacji tekstu (może przyjmować dwie wartości wyliczeniowe: TO_UPPER lub TO_LOWER).
Wartość zwracana:
Funkcja zwraca wskaźnik na txt w przypadku powodzenia lub
NULL w przeciwnym przypadku.
Napisz program, który pobierze od użytkownika tekst (nie więcej niż 1000 pierwszych znaków), a następnie informację (w formie jednego znaku) na jakie litery mają zostać zamienione wszystkie znaki w tekście wejściowym. Podanie litery B/b spowoduje zamianę liter na duże, podczas gdy podane podanie S/s spowoduje zamianę liter w tekście na małe.
W przypadku podania przez użytkownika błędnego znaku program powinien wyświetlić komunikat Incorrect input i poczekać na kolejny znak. Po wprowadzeniu poprawnego symbolu program powinien zmodyfikować wprowadzony tekst, wykorzystując przygotowaną wcześniej funkcję, zgodnie z wyborem użytkownika.
Tekst, po dokonanej modyfikacji, powinien zostać wyświetlony na ekranie.
Uwagi
Nie korzystaj z bibliotek ctype, stdlib oraz string oraz z funkcji w nich zawartych.
Nie korzystaj z funkcji z rodziny scanf, za wyjątkiem samej funkcji scanf.
W programie nie wolno używać operatora [] oprócz deklaracji tablicy.
W programie nie wolno używać cyfr, oprócz cyf 0 i 1.
W programie nie wolno używać magicznych liczb.
Deklaracje wszystkich funkcji oraz definicja typu wyliczeniowego powinna być zamieszczona w pliku letter_changer.h, a definicje funkcji w pliku letter_changer.c.
Tekst powinien zostać wyświetlony bez zbędnych białych znaków przed i po właściwym tekście (znak nowej linii to też biały znak).
Przykładowa interakcja z programem -- sukces:
Podaj tekst:
Przykladowy tekst.
Podaj rodzaj modyfikacji:
B⏎
PRZYKLADOWY TEKST.
Wpisz cos:⏎
ALA ma KoTa ⏎
Jesli wielkie wcisnij: B, male: S⏎
x⏎
Incorrect input⏎
Jesli wielkie wcisnij: B, male: S⏎
^⏎
Incorrect input⏎
Jesli wielkie wcisnij: B, male: S⏎
m⏎
Incorrect input⏎
Jesli wielkie wcisnij: B, male: S⏎
F⏎
Incorrect input⏎
Jesli wielkie wcisnij: B, male: S⏎
s⏎
ala ma kota ⏎
Rozpisałem swój kod. Definicje funkcji w pliku letter... .c :
#include <stdio.h>
#include "letter_changer.h"
char* change_letter_size(char *txt, enum letter_changer_t c)
{
if( txt == NULL || (c<0 || c>1) )
{
return NULL;
}
int i = 0;
while( *(txt + i) != '\0' )
{
if( c == 1)
{
if( *(txt + i)>='A' && *(txt + i)<='Z' )
{
*(txt + i) = to_lower( *(txt + i));
}
}
if( c == 0)
{
if( *(txt + i)>='a' && *(txt + i)<='z' )
{
int a;
a = to_upper( *(txt + i));
*(txt + i) = a;
}
}
i++;
}
return txt;
}
char to_lower(char a)
{
if(a>='A' && a<='Z')
{
a += ' ';
}
return a;
}
char to_upper(char a)
{
if(a>='a' && a<='z')
{
a -= ' ';
}
return a;
}
, a tutaj w main-ie:
#include <stdio.h>
#include "letter_changer.h"
//#include "letter_changer.c"
char * removing_starting_spaces(char * txt);
int main()
{
printf("Podaj tekst:\n");
char table[1001]={0};
fgets(table,1001,stdin);
enum letter_changer_t wybor;
char znak;
printf("Podaj rodzaj modyfikacji:\n");
int i = 0;
do
{
if( i != 0)
{
printf("Incorrect input\n");
printf("Podaj rodzaj modyfikacji:\n");
}
scanf(" %c",&znak);
i++;
}while( znak!='B' && znak!='b' && znak!='s' && znak!='S' );
if( znak == 'b' || znak == 'B')
{
wybor = 0;
}
if( znak == 's' || znak == 'S')
{
wybor = 1;
}
change_letter_size(table,wybor);
char * pointer_on_b_spaces;
pointer_on_b_spaces = removing_starting_spaces(table);
printf("%s",pointer_on_b_spaces);
return 0;
}
char * removing_starting_spaces(char * txt)
{
while( *txt != '\0')
{
if( *txt == ' ')
{
}
else
{
break;
}
txt++;
}
return txt;
}
Problem występuje na sprawdzeniu całego programu. Oto co się dzieje:
Podaj tekst:⏎
What you do makes a difference, and you have to decide what kind of difference you want to make. - Jane Goodall "It has become appallingly obvious that our technology has exceeded our humanity." - Albert Einstein "Technology... the knack of so arranging the world that we don't have to experience it." - Max Frisch Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live - John Woods There is no reason and no way that a human mind can keep up with an artificial intelligence machine by 2035. - Gray Scott Object-oriented programming offers a sustainable way to write spaghetti code. It lets you accrete programs as a series of patches. - Paul Graham "Talk is cheap. Show me the code." - Linus Torvalds You've baked a really lovely cake, but then you've used dog shit for frosting. - Steve Jobs Insanity is doing the same thing, over and over again, but expecting different results. - Narcotics Anonymous I am not pretty. I am not beautiful. I am as radiant as the sun. - Suzanne Collins Jobs offshoring began with manufacturing, but the rise of the high-speed Internet made it possible to move offshore tradable professional skills, such as software engineering, information technology, various forms of engineering, architecture, accounting, and even the medical reading of MRIs and CT-Scans. - Paul Craig Roberts Tell the truth, or someone will tell it for you. - Stephanie Klein "Walking on water and developing software from a specification are easy if both are frozen." - Edward V Berard I am not pretty. I am not beautiful. I am as radiant as the sun. - Suzanne Collins Just because something doesn't do what you planned it to do doesn't mean it's useless.-Thomas Edison I have been wildly enthused about gaming since I was younger, and a career path I chose not to go down but did really consider was getting into programming and game design. - Trent Reznor "I don't care if it works on your machine! We are not shipping your machine!" - Vidiu Platon. When we love, we always strive to become better than we are. When we strive to become better than we are, everything around us becomes better too. - Paulo Coelho ⏎
Podaj rodzaj modyfikacji:⏎
Incorrect input⏎
Podaj rodzaj modyfikacji:⏎
Incorrect input⏎
Podaj rodzaj modyfikacji:⏎
Incorrect input⏎
Podaj rodzaj modyfikacji:⏎
Incorrect input⏎
Podaj rodzaj modyfikacji:⏎
Incorrect input⏎
Podaj rodzaj modyfikacji:⏎
what you do makes a difference, and you have to decide what kind of difference you want to make. - jane goodall "it has become appallingly obvious that our technology has exceeded our humanity." - albert einstein "technology... the knack of so arranging the world that we don't have to experience it." - max frisch always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live - john woods there is no reason and no way that a human mind can keep up with an artificial intelligence machine by 2035. - gray scott object-oriented programming offers a sustainable way to write spaghetti code. it lets you accrete programs as a series of patches. - paul graham "talk is cheap. show me the code." - linus torvalds you've baked a really lovely cake, but then you've used dog shit for frosting. - steve jobs insanity is doing the same thing, over and over again, but expecting different results. - narcotics anonymous i am not pretty. i am not beautifulC⏎
"Test został przerwany; Liczba linii wyświetlianych przez program jest nieprawidłowa; powinny być dwie."
Ta literka końcowa:
C
powinna chyba być wyżej po rodzaju modyfikacji. Co więc się tutaj dzieje? I jak mogę to naprawić?
P.S W jaki sposób mogę się pozbyć spacji końcowych? Za cenną radę z góry dziękuję. :)