• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Łańcuchy znaków

VPS Starter Arubacloud
0 głosów
285 wizyt
pytanie zadane 18 stycznia 2017 w C i C++ przez Akiro Bywalec (2,910 p.)
1. Napisać funkcje, które w ciągu znaków, gdy wystąpi 'A' zaraz za nim wstawi 'B', a resztę ciągu przesunie

2. 5. funkcja bool sprawdzająca czy w zadanym łańcuchu poszczególne wyrazy są oddzielone tylko jedną spacją, jeśli tak - true, jeśli nie - false

3. Napisz funkcje usuwajaca z lancucha znakow wszystkie wystapienia cyfr, lancuch mial zostac zsuniety po usunieciu.

 

Nie wiem jak się za to zabrać, może jakieś wskazówki:

a) Jak napisać funkcję, która wstawia jakiś znak na konkretnym miejscu

b) jak usunąć jakieś znaki z tablicy tekstowej, jak zsunąć później ewentualnie łańcuch

3 odpowiedzi

0 głosów
odpowiedź 18 stycznia 2017 przez Akiro Bywalec (2,910 p.)

Czy zadanie nr 2 może być wykonane w ten sposób: 

#include <iostream>


using namespace std;


bool sprawdzenie ()
{
    char tab[10];
    int licznik=0;
    cin.getline(tab,10);
    for (int i=0; i<10; i++)
    {
        if (tab[i]==' ')licznik++;
    }
    if (licznik>1) return true;
    else return false;

}

int main()
{

    cout << sprawdzenie();

        return 0;
}

 

komentarz 18 stycznia 2017 przez criss Mędrzec (172,590 p.)
Twoja funkcja sprawdza czy w stringu są co najmniej 2 spacje. Chyba nie o to chodziło..

Poza tym znacznie ładniej by to wyglądało gdyby funkcja przyjmowała napis jako argument a nie sama rozpoczynała procedure wpisywania.
komentarz 18 stycznia 2017 przez Akiro Bywalec (2,910 p.)
Taak, wiem to na szybko robię bo to taki szkielet tylko. Moja funkcja sprawdza czy w tablicy znaków znajduje się więcej niż jedna spacja.
komentarz 18 stycznia 2017 przez criss Mędrzec (172,590 p.)
To sie nie pytaj głupio skoro wiesz, że nie spełnia wymogów zadania XD
komentarz 18 stycznia 2017 przez Akiro Bywalec (2,910 p.)
Ale to jest mniej czasochłonne a ja teraz nie robie zadania domowego ani nie ćwiczę przesyłania tablic znaków tylko operacje na samych ciągach.
0 głosów
odpowiedź 18 stycznia 2017 przez criss Mędrzec (172,590 p.)

a)

void f(char * str, int n)
{
   str[n] = 'a';
}

b) Możesz albo zaalokować nowy łańcuch znaków i odpowiednio przekopiować znaki z poprzedniego (użyj strcpy) (opcja pamięcio-oszczędna), albo nie tworzyć nowego łańcucha, tylko operować na tym samym łańcuchu przekopiowując odpowiednio fragment łańcucha w tył przykrywając niechciane znaki, a na koniec tylko przesunąć znak '\0' (znak kończący łańcuch) na faktyczny koniec łańcucha (opcja potencjalnie wydajniejsza).

komentarz 18 stycznia 2017 przez Akiro Bywalec (2,910 p.)
void fck()
{
    char tab[10];
    cin.getline(tab,10);

    for (int i=0; i<10; i++)
    {
        if ((tab[i]>='0')&&(tab[i]<='9'))
        {
            tab[i]=' ';

        }
        cout << tab[i] << endl;
    }
   

}

Zrobiłem takie coś i właśnie mam problem z usunięciem tych spacji, nie mogę sobie jakoś tego wyobrazić jak przemieścić wyraz w tablicy o jedno miejsce w prawo bądź lewo nie tracąc danych

komentarz 18 stycznia 2017 przez criss Mędrzec (172,590 p.)

Twoja funkcja zamienia wszystkie znaki o ascii pomiędzy '0' a '9' na spacje. Jaki to ma związek z usuwaniem spacji?

Użyj strncpy. Przykład:

    char * str = new char[12];
    strcpy(str, "Jakis Napis");
    
    strncpy(str + 5, str + 6, 5);
    str[strlen(str) - 1] = '\0';
    
    std::cout << str; 

Output: JakisNapis

Możesz w ostatnim argumencie strncpy podać liczbe o jeden większą - tutaj 6. Wtedy od razu przekopiuje ci '\0' na wlasciwe miejsce. Teraz napisałem tak, żeby wszystko było jasne.

0 głosów
odpowiedź 18 stycznia 2017 przez heros22pt Użytkownik (950 p.)

a)

#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
	char zdanie[100];
	cin >> zdanie;
	int dlugosc;
	dlugosc = strlen(zdanie);

	vector<char> lista_znakow;
	for (int i = 0; i < dlugosc; i++)
	{
		lista_znakow.push_back(zdanie[i]);
		if (zdanie[i] == 'A')
		{
			lista_znakow.push_back('B');
		}
	}
	
	dlugosc = sizeof(lista_znakow);
	for (int i = 0; i < dlugosc; i++)
	{
		cout << lista_znakow[i];
	}

	system("pause");
}

 

Podobne pytania

0 głosów
0 odpowiedzi 205 wizyt
pytanie zadane 17 grudnia 2017 w C i C++ przez Kamillo112 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 178 wizyt
pytanie zadane 13 lutego 2017 w C i C++ przez Astenna Początkujący (340 p.)
0 głosów
1 odpowiedź 729 wizyt
pytanie zadane 30 czerwca 2016 w C i C++ przez 1naswiecie Początkujący (410 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...