Wyświetlanie połowy stringa

Odpowiedz Nowy wątek
2019-04-13 21:35
0

Witam skleiłem coś takiego:

#include <iostream>
#include <string.h>
#include <vector>

using namespace std;

int t,i=0,t1,i1=0,td,i2=0;
int d1[1000];
string napis[1000];

int main()
{
    cin>>t;
    t1=t;
    td=t;
    while(t>0)
    {
        cin>>napis[i];
        t--;
        i++;
    }
    while(t1>0)
    {
        d1[i1]=napis[i1].length()/2;
        string w=napis[i1];
        char * ct = new char[i1+1];
        strcpy(ct,w.c_str());
        string wy;
        for(int a=0; a<d1[i1]; a++)
        {
            wy+=ct[a];
        }
        cout<<wy<<endl;
        t1--;
        i1++;
    }
    return 0;
}

Działa ale wydaje mi się że jest to strasznie prymitywne... Ogólne zadanie polega na tym że wpisujesz na początku liczbę ile stringów wpiszesz potem je wpisujesz a program obcina ci do połowy. Ma ktoś pomysł jak to poprawić aby "ładniej" wyglądało? Szczególnie boli mnie to multiplikowanie zmiennych i stałych...

Pozostało 580 znaków

2019-04-13 21:40
kq

Twój program jest niepoprawny: https://wandbox.org/permlink/Z3AkXxgpS2Ds706R

Zamiast bawić się w błędne new i delete (po co, skoro i tak używasz stringa?!) i zbędnie sobie utrudniać pracę, idź "na łatwiznę":

Masz tu alternatywę:

int main()
{
    int count;
    std::cin >> count;
    while(count --> 0) {
        std::string s;
        std::cin >> s;
        s.resize(s.size()/2);
        std::cout << s << '\n';
    }
}

BTW: https://dsp.krzaq.cc/post/176[...]xx-kiedy-uzywac-new-i-delete/


edytowany 1x, ostatnio: kq, 2019-04-13 21:45
Pokaż pozostałe 6 komentarzy
Jak odczyt się nie powiedzie to zostanie zapisane zero. https://en.cppreference.com/w[...]o/basic_istream/operator_gtgt - kq 2019-04-14 22:21
@kq: Zawsze tak było, bo bym dał rękę sobie uciąć ze kiedyś to było UB :p I teraz pewnie ręki bym nie miał - Dregorio 2019-04-14 22:23
Miałbyś rękę - zmiana od C++11 :​) - kq 2019-04-14 22:24
Aa no właśnie. Przed C++11 zmieniłem język :p dzięki za wyjaśnienie - Dregorio 2019-04-14 22:25
weź popraw umiejscowienie spacji, bo jeszcze jakiś newbie pomyśli, że tam jest długa strzałka ;) (szczególnie, że kolorowanie składni potęguje to wrażenie). - MarekR22 2019-04-15 11:46

Pozostało 580 znaków

2019-04-14 12:47
0
#include <iostream>

using namespace std;

int t,i=0,t1,i1=0;
string napis[1000],n[1000];

int main()
{
    cin>>t;
    t1=t;
    while(t>0)
    {
        cin>>napis[i];
        t--;
        i++;
    }
    while(t1>0)
    {
        n[i1]=napis[i1].resize(napis[i1].size()/2);
        cout<<n[i1]<<endl;
        t1--;
        i1++;
    }
    return 0;
}

Pozostało 580 znaków

2019-04-14 15:37
kq
0

A co za błąd masz? Szklana Kula ma wolne - niedziela. Pomijając użycie while zamiast for, i krótkie, niedeskryptywne nazwy zmiennych, chyba jest ok, o ile liczba stringów wejściowych jest mniejsza niż 1000


|20|error: no match for 'operator=' (operand types are 'std::cxx11::string {aka std::cxx11::basic_string<char>}' and 'void')| Hmm użyć for zamiast while i polepszyć nazwy? Zapamiętam. I ciekawe określenie siebie jako "Szklana Kula";) Mogę zaczekać do jutra czy nawet przyszłego roku robię inne zadania i jakoś idzie mimo wszystko dziękuję za całą pomoc którą już od Ciebie otrzymałem. - TenAnonim 2019-04-14 15:58
Odpowiedzi w odpowiedziach - kq 2019-04-14 16:00
Nie rozumiem - TenAnonim 2019-04-14 16:41
Do odpowiedzi na forum służą odpowiedzi, nie komentarze. - kq 2019-04-14 22:02

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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