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

Jak sprawdzić jaki znak znajduje się w strumieniu wejścia.

42 Warsaw Coding Academy
0 głosów
344 wizyt
pytanie zadane 10 czerwca 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)
edycja 10 czerwca 2020 przez amtrax

Cześć, 

mam napisać program, który zlicza znaki aż do napotkania '$'. Znak ten powinien zostać w strumieniu. 

#include <iostream>

using namespace std;

int main()
{
    char ch;
    int  c = 0;
   cin>>ch;
    while (true)
    {
        if (ch != '$')
            cin>>ch;
        else
            break;
    }
  cout<<c<<endl;

    return 0;
}

Czy da się sprawdzić jaki znak znajduje się w strumieniu wejścia? 

PS

Dlaczego taka instrukcja nie powoduje, że CodeBlock tworzy plik txt? 
 

string nazwa;
    cout << "podaj nazwe pliku: ";
    cin>>nazwa;

      ofstream fout(nazwa.c_str());
   
    fout<<nazwa;
    fout.close();

W katalogu znajduje się plik o podanej nazwie, jednak nie jest on ".txt", nie można go otworzyć.

 

1
komentarz 10 czerwca 2020 przez tkz Nałogowiec (42,020 p.)

Co do drugiego, jak wpisujesz nazwę pliku? "plik", czy "plik.txt"?

A co do pierwszego, możesz tak

#include <iostream>
#include <string>

int main()
{
    std::string name;
    while(std::cin>>name, name!="$")
    {
        std::cout<<name<<'\n';
    }
}

 

2 odpowiedzi

+1 głos
odpowiedź 10 czerwca 2020 przez mokrowski Mędrzec (158,440 p.)
komentarz 10 czerwca 2020 przez amtrax Dyskutant (9,630 p.)
przywrócone 10 czerwca 2020 przez amtrax

Dziękuję, 

okazało się, ze $ nie zostaje w strumieniu, jak mogę zmodyfikować kod żeby spełnić ten wymóg? 

std::string name;
    while(std::cin>>name, name!="$")
    {
        std::cout<<name<<'\n';
    }

 

komentarz 10 czerwca 2020 przez mokrowski Mędrzec (158,440 p.)

Nie pobierać go ze strumienia, co dzieje się gdy robisz:

while(std::cin>>name ....)

Znak "podglądaj" przez peek(...).

+1 głos
odpowiedź 10 czerwca 2020 przez Jacob99 Obywatel (1,840 p.)

1. Użyj std::cin.peek()

#include <iostream>

int main() 
{
    unsigned int count = 0;

    while(std::cin.peek() != '$')
    {
        ++count;
        std::cin.get();
    }

    std::cout << count << std::endl;
}

2. Tak jak zauważył @tkz, jeśli podasz nazwę jako "file.txt" to utworzy plik 'file.txt', natomiast jeśli podasz nazwę bez rozszerzenia ("file"), to utworzy ci plik 'file'. On dalej będzie plikiem tekstowym i możesz go otworzyć w dowolnym edytorze tekstu.

komentarz 10 czerwca 2020 przez amtrax Dyskutant (9,630 p.)
edycja 10 czerwca 2020 przez amtrax

Zmodyfikowałem Twój kod tak aby nie liczył białych znaków, teraz działa :D 

#include <iostream>

using namespace std;

int main()
{
    int count = 0;

    while(cin.peek() != '$')
    {
        ++count;
        cin.get();
       if(isspace(cin.get()) == true)
              --count;
    }

    char x = cin.peek();
    cout<<x;
    return 0;
}

 

1
komentarz 10 czerwca 2020 przez Jacob99 Obywatel (1,840 p.)

Pokomplikowałeś strasznie (i omijasz co drugi znak).

#include <iostream>
#include <cctype>
 
int main()
{
    int count = 0;
 
    while(std::cin.peek() != '$')
    {
        if(!std::isspace(std::cin.get()))
        {
            ++count; 
        }
    }
 
    std::cout << std::cin.peek();
    return 0;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 208 wizyt
pytanie zadane 29 października 2023 w Sprzęt komputerowy przez Tymoteusz_ Nowicjusz (240 p.)
0 głosów
2 odpowiedzi 885 wizyt
0 głosów
1 odpowiedź 598 wizyt
pytanie zadane 19 lutego 2016 w C i C++ przez Daaa22 Dyskutant (8,250 p.)

93,382 zapytań

142,382 odpowiedzi

322,539 komentarzy

62,740 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...