operacja na stringach

zxc18
Użytkownik
Użytkownik
Posty: 92
Rejestracja: 12 gru 2007, o 14:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 65 razy
Pomógł: 1 raz

operacja na stringach

Post autor: zxc18 »

Mam problem w zrozumieniu operacji na stringach :( mam dosc duzo zadan z tego tematu, niestety nie wiem jak sie za nie zabrac .. Mogłbym prosic o pomoc ? Mozecie mi wskazac jakas skarbnice wiedzy na temat stringow ? skad sie uczyc ?? Moze pomozecie rozwiazac pare zadan bym zobaczyl jak to dziala ?

Moje zadania:

Przetwarzanie tekstów - łańcuchów znaków
(tablica zawierająca przetwarzany tekst powinna być parametrem
wejściowo/wyjściowym pisanej funkcji)

1.

Napisz program, który wczyta łańcuch znaków z klawiatury
a następnie usunie z tego łańcucha pierwszą małą literę.
2.

Napisz funkcję, która usunie wszystkie początkowe spacje
w łańcuchu tekst, który powinien być parametrem wejściowo/wyjściowym tej funkcji.

3. Napisz funkcję usuwającą z zadanego łańcucha (poprzez skrócenie tekstu)
wszystkie bezpośrednie powtórzenia liter np. zamieniającą tekst “kommputter” na
”komputer”.

4. Napisz funkcję wyrównującą długość zadanego tekst'u do N znaków,
poprzez dodanie odpowiedniej ilości spacji na końcu tego łańcucha.

A ja nawet nie wiem jak sie za to zabrac :( :( Bardzo prosze o pomoc .. z gory bardzo dziekuje i pozdrawiam.
Ostatnio zmieniony 21 gru 2007, o 23:50 przez zxc18, łącznie zmieniany 1 raz.
Landru
Użytkownik
Użytkownik
Posty: 21
Rejestracja: 10 gru 2007, o 14:08
Płeć: Mężczyzna
Podziękował: 1 raz

operacja na stringach

Post autor: Landru »

ja nie wyobrażam sobie nauki programowania bez dobrej książki. polecam "Thinking in C++", według mnie dobre dla początkujących.
zxc18
Użytkownik
Użytkownik
Posty: 92
Rejestracja: 12 gru 2007, o 14:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 65 razy
Pomógł: 1 raz

operacja na stringach

Post autor: zxc18 »

wedlug mnie thinking in c++ jest za trudna dla poczatkujacego, za duzo informacji naraz, odrazu klasy itd i wszystko jest nieupokladane .. Sam analizuje duzo ksiazek by odpowiedziec na nurtujace mnie pytania, jednakze nie znajduje czesto odpowiedzi i dlatego zwracam sie z prosba na forum.. a nie dlatego ze nie chce mi sie czegos robic ... Naprawde duzo pracuje by byc dobry w programowaniu jednak widac ze nie kazdy musi byc bardzo inteligentny i rozumiec rzeczy dla innych banalne .. ja ma problem ze stringami i dlatego Was prosze o nakierowanie na dobra droge.. reszte zadan, zrobie sam opierajac sie na przykladach ...
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

operacja na stringach

Post autor: smiechowiec »

Myślę że wspólnymi formowymi siłami damy radę uporać się z tymi zadaniami.

Kod: Zaznacz cały

#include <stdio.h>

#define DLUGOSSTRINGA 80

/* usunięcie pierwszej małej litery */
char *usunmalalitere(char *s) {
  int i, bkoniec = 0;
  for(i = 0; s[i] && !bkoniec; i++) 
    if ((s[i] >= 'a') && (s[i] <= 'z')) {
      bkoniec = 1;
      for(; s[i]; i++)
        s[i] = s[i + 1];
    }
  return s;
}


/* Obcięcie spacji z początku łańcucha znaków */
char *ltrim(char * s) {
  char *p = s;
  while ( *p == ' ')  {
    while (*p) {
      *p = *(p + 1);
      p++;
    }
    p = s;
  }
  return s;
}

int main(int argc, char *argv[]) {
  char s[DLUGOSSTRINGA];
  fgets(s, DLUGOSSTRINGA, stdin);
  printf("%s\n", ltrim(s));
  printf("%s\n", usunmalalitere(s));
  return 0;
}
Awatar użytkownika
Dargi
Użytkownik
Użytkownik
Posty: 1228
Rejestracja: 17 lis 2005, o 18:55
Płeć: Mężczyzna
Lokalizacja: Pomorze
Podziękował: 54 razy
Pomógł: 253 razy

operacja na stringach

Post autor: Dargi »

operacja na stringach
Bardzo ciekawie zatytułowałeś post ^^ :D
zxc18
Użytkownik
Użytkownik
Posty: 92
Rejestracja: 12 gru 2007, o 14:29
Płeć: Mężczyzna
Lokalizacja: Szczecin
Podziękował: 65 razy
Pomógł: 1 raz

operacja na stringach

Post autor: zxc18 »

Wielkie dzieki Smiechowiec teraz zabieram sie za doglebna analize zadania ...

Co do tytulu tematu, nie mialem lepszego pomyslu :d Stringi zawsze rozbudzaja wyobraznie i przyciagaja ciekawskie spojrzenia (pewnie dlatego tyle osob odwiedzilo ten temat )

Sry za ot .. Pozdrawiam
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

operacja na stringach

Post autor: smiechowiec »

Jeśli chodzi o opis funkcji do działania na stringach to proponuję stronę

Kod: Zaznacz cały

#include <stdio.h>

#define DLUGOSSTRINGA 80


/* Ununięcie powtarzających się po sobie znaków tzw dubletów */
char *usundublety(char * s) {
  char *p = s, *pom;
  while (*p)  {
    if  (*p == *(p + 1)) {
      pom = p;
      while (*pom) {
        *pom = *(pom + 1);
        pom++;
      }
    }
    else
      p++;
  }
  return s;
}

/* Wyrówanie tekstu do n znaków spacjami */
char *wyrownajtekst(char *s, int n) {
  int i, j;
  for(i = 0; s[i] && (s[i] != '\n'); i++);
  if (i < n) {
    for(j = i; j < n; j++)
      s[j] = ' '; /* dodajemy spacje */
    s[j] = 0; /* dodajemy znak końca łańcuch tekstowego */
  }
  return s;
}


int main(int argc, char *argv[]) {
  char s[DLUGOSSTRINGA];
  int i;
  fgets(s, DLUGOSSTRINGA, stdin);
  
  for(i = 0; i < 20; i++)
    printf("%i", (i + 1) % 10);
  printf("\n%s<-tu sie konczy\n", wyrownajtekst(s, 20));
  puts("Usuwamy powtorzenia");
  printf("%s<-tu sie konczy\n", usundublety(s));
  
  return 0;
}
Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

operacja na stringach

Post autor: Rafal88K »

zxc18 pisze:Naprawde duzo pracuje by byc dobry w programowaniu
Ale zadania, które tutaj podałeś można zrobić po paru godzinach nauki programowania. Wystarczy chcieć ;)

Napiszę Ci zadanie numer 3 bo chyba ono jest najtrudniejsze ;)

Kod: Zaznacz cały

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char** argv)
{
    string myStr;
    string::iterator it;

    cin >> myStr;

    it = unique(myStr.begin(), myStr.end());
    myStr.erase(it, myStr.end());

    cout << myStr;

    cout << endl;
    system("pause");
    return 0;
} 
Jak widać program jest bardzo prosty ;) Po usunięciu zbędnych linii zajmuje on tylko 14 wierszy.


Mała uwaga do zad. 4 każdy poprawny string musi być zakończony znakiem NULL ('\0')
ODPOWIEDZ