Operacje na łańcuchach znaków

0

Witam, do stworzenia miałem program, który po wpisaniu znakow dokona na tym łancuchu nastepujacych czynnosci:

  • zmieni wszystkie znaki na wielkie
  • zmieni wszystkie znaki na male
  • odwroci znaki, np. abc -> cba
  • porowna napisy i zwroci wynik porwnania nie uwzgledniajac wielkosci znakow.

wszystko oczywiscie w osobnych funkcjach.

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

void naduze(char str[]);
void namale(char str[]);
int odwroc(char str[]);
void porownaj(char s1[], char s2[]);


int main()
{
    printf("Podaj : ");
    char str[100];
    scanf("%s", str);
    namale(str);
    naduze(str);
    odwroc(str);
    
    printf("Podaj pierwszy ciag: ");
    char s1[100];
    scanf("%s", s1);
    printf("Podaj drugi ciag: ");
    char s2[100];
    scanf("%s", s2);
    porownaj(s1, s2);
    system("pause");
    return 0;
}

void naduze(char str[])
{
  int i=0;
  char d;
  printf("Zamiana na duze: ");
  while (str[i])
  {
    d=str[i]; 
    putchar (toupper(d));
    i++;
  }
  printf("\n");
}

void namale(char str[])
{
  int i=0;
  char c;
  printf("Zamiana na male: ");
  while (str[i])
  {
    c=str[i];
    putchar (tolower(c));
    i++;
  }
  printf("\n");
}

int odwroc(char str[])
{
  strrev(str);
  printf("Odwrocone slowo: %s\n", str);
}

void porownaj(char s1[], char s2[])
{
    int i=0;
    char c;
    while (s1[i])
    {
          c=s1[i];
          putchar (tolower(c));
          c=s2[i];
          putchar (tolower(c));
          i++;
    }
    
    if (strcmp (s1,s2) == 0)
    {
        printf("\nCiagi sa identyczne\n");
    }
    else
    {
        printf("Ciagi sa rozne\n");
    }
    
}

no wiec jest kilka problemow:

  1. Jezeli wpisze jakies zdanie, np. Ala ma kota, to operacje zostana przeprowadzone tylko na slowie Ala, a nie na calym zdaniu..
  2. Po wpisaniu calego zdania, nie moge dokonac porownana dwoch slow funkcja strcmp. Moze ktos przejrzec kod i zobaczyc gdzie lezy blad? Pozdrawiam.
0

Jest to jeden z tych wątków w których zastanawiam się, czy osoba, która go załozyła wie co to debuger. W wolnej chwili spróbuję wniknąć, ale o wiele szybciej będzie jak puścisz program pod debugerem i jestem pewien, że szybko znajdziesz odpowiedź.

scanf ignoruje spacje, więc z "Ala ma kota" zostaje tylko "Ala".

http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

0

scanf zastapilem gets, wszystko gra. Niestety oprocz porownania, nie zwraca uwagi na duze i male litery, np. prownanie ala i ALA wyswietli ze ciagi znakow sa rozne...

0

Azarien już to napisał ale jeszcze raz powtórzę NIGDY NIE UŻYWAJ gets();
Zamiast tego użyj:

fgtest(str,szieof(str),stdin);

Co prawda ma to jeden mankament wczytuje razem z enterem z tym że likwidacja entera jest prosta:

char *p;
p=strchr(str,'\n');
if(p) *p=0;
else { printf("Podales wiecej niz %d znakow\n",szieof(str)-1); while(getchar()!='\n'); }

Twój problem polega na tym że twój program nie spełnia pierwszych punktów zadania:

  • zmieni wszystkie znaki na wielkie
  • zmieni wszystkie znaki na male
  • odwroci znaki, np. abc -> cba
    Twój kod nie zmienia zaś wyświetla, rozumiesz różnicę ?

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