Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Informacja o długości wczytanego stringa z std::cin


Rekomendowane odpowiedzi

Opublikowano

Siemka, ostatnio napotkałem taką małą zagwostkę.

tworzę sobie tablicę charów

char* tab = new char[1000];

potem wczytuję z wejścia

cin >> tab+i 

stringa o NIEZDEFINIOWANEJ DŁUGOŚCI. (jest ich kilka, łącznie mają maksymalnie 1000 znaków. Nie użyję stringów, jak ktoś chce to się rozpiszę dlaczego).

I teraz powstaje pytanie. Czy da się uzyskać długość wczytanego stringa (ilość znaków zapisanych do tablicy w sposób inny niż uprzednie zainicjalizowanie tablicy zerami i zliczenie ilości znaków do najbliższego zera O(n)? tzn. szybszy, bo zakładam, że std:cin musi ZNAĆ (wyliczyć) długość tego stringa, aby wiedzieć ile znaków wczytać. I raczej musi mieć to gdzieś zapisane, przynajmniej na czas wykonania. I POWINIEN być sposób, aby się do tego dobrać.

 

 

PS. Związane z zadaniem na OIG, ale myślę, że proszenie o pomoc w takiej ogólnej sprawie, nie jest niczym złym.

Opublikowano

#include <iostream>

int main()
{
char * t = new char[100];
std::cin.get(t, 100);
std::cout << std::cin.gcount();

return 0;
}

 

Do OI używaj scanfa bo szybszy ;)

Opublikowano
Opublikowano

Jak już będziesz chciał zostać przy std::cin/cout to dodaj sobie przed wczytywaniem

std::ios_base::sync_with_stdio(0);

Powinno przyśpieszyć ;]

Opublikowano

Właśnie próbowałem. Używam cin.get do charów i scanf() do intów. Problem jest taki, że przy sync_with_stdio(false) jest błąd.

http://screenshooter...4972688/gcjimkh

 

Jeszcze napotkałem inny problem, mianowicie u mnie wszystko działa bez zarzutów, ale już na testach na ideone jest lipa. std::bad_alloc. Mój poprzedni kod bez scanf i cin.get działa tam bez zarzutów

Myślę, że jest możliwość zobaczenia na platformie czy nie ma błędów i w razie czego podesłanie innego pliku, bo inaczej byłoby nie fajnie

Opublikowano

Jeśli to działa w gim tak samo jak w liceum, to masz możliwość testowania tych programów tam w tym systemie. Mi się tam nigdy z tym nic nie jebało... może coś tam masz źle?

Opublikowano

tak, to jest to samo co OI tylko poziom niżej. z tego co wiem to std::bad_alloc rzucają funkcje z biblioteki standardowej. Później jeszcze zrobię pare poprawek odnośnie optymalizacji i wyślę to na platformę.

 

Odnośnie synca to będę kombinował, może znajdę odpowiedź. Na razie wiem tyle, że return code 3 oznacza, że

Exit code 3 can mean an uncaught exception. Since you don't seem to use exceptions yourself, this is likely due to a std::bad_alloc exception, which generally means that your system has run out of memory.

Trochę mnie niepokoi to, że jest to dopiero po wyłączeniu synca. Spróbuję jeszcze na ideone z wyłączonym synciem i zobaczę czy też się wysypuje.

Czas jest to na pewno się coś wykombinuje.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...