Avatar billede thomassoerensen Nybegynder
06. februar 2002 - 12:16 Der er 7 kommentarer og
1 løsning

<Enter> som end-of-file indicator

Hvad er syntaxen i C++ for at anvende <Enter> som end-of-file indikator jf. spm. om end-of-file for string?

Her er koden igen:

--------------------------------------------------

// ex03-03.cpp
// A program that counts how many times a distinct work appears in the input

#include <conio>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using std::cout;
using std::string;
using std::cin;
using std::endl;
using std::vector;
using std::count;

int main()

{
    // ask for input
    cout << "Please enter input to be analyzed: ";
    vector<char> input;
    char inp;
    // invariant: input contains all the input words
    while (cin >> inp)
        input.push_back(inp);

    cout << endl << "The number of entries in the vector is " << input.size()
    << "!" << endl;
    int i = 0;
    char testword = 'test';
    count(input.begin(), input.end(),testword,i);
    cout << "The number of 5's in the input are: " << i;

    getch();
    return 0;
}

--------------------------------------------------

Avatar billede emileej Nybegynder
06. februar 2002 - 12:46 #1
Flere oplysninger (i dont get it)?
Avatar billede chries Nybegynder
06. februar 2002 - 12:52 #2
følgende laver en udendelig loop, med mindre du indtaster værdien 0 (altså ikke '0' men 0):

    while (cin >> inp)
        input.push_back(inp);

en anden måde at gøre det på ville være:

// ask for input
cout << "Please enter input to be analyzed: " << endl;

char inp[100];

scanf( "%s", inp );

for( int i=0; i<strlen(inp); i++ )
{
  // add vector inp[i];
  cout << inp[i] << endl;
}

getch();
Avatar billede chries Nybegynder
06. februar 2002 - 12:53 #3
udendelig = uendelig
Avatar billede chries Nybegynder
06. februar 2002 - 12:57 #4
char inp[100]; <- kommer til at indeholde strengen

scanf( "%s", inp ); <- indlæs streng, afsluttet med enter

for( int i=0; i<strlen(inp); i++ ) <- for alle elementer indtastet ( "HEJ" = 3 elementer )
{
  // add vector inp[i];
  cout << inp[i] << endl; <- udskriv element
}
Avatar billede soepro Nybegynder
06. februar 2002 - 13:12 #5
Som jeg skrev til http:/www.eksperten.dk/spm/168827, så lav denne her ændring i dit program:

// invariant: input contains all the input words
while (cin >> inp && inp != eosChar)
  input.push_back(inp);

idet du så definerer "char eosChar = '\xr';" (for ENTER som afslut) eller "char eosChar = '\<1B';" (for ESC)
Avatar billede soepro Nybegynder
06. februar 2002 - 13:13 #6
Avatar billede thomassoerensen Nybegynder
06. februar 2002 - 13:13 #7
Hmmmm.
Jeg kan ikke få din første kommentar til at virke.

Mener du at jeg f.eks. som input kan taste "en to test tre fire test fem seks test 0" (0 er numerisk nul) og få output:

"The number of entries in the vector is 9
The number of 5's in the input are: 3"

Jeg kan stadig ikke fortælle programmet at input er færdigt.

Jeg kunne godt tænke mig at forstå denne løsning idet den ikke begrænser input til at være en bestemt mængde entries.
Men måske er det det at jeg briger en vector til at lagre char i, som den ikke kan lide. Vil en list være bedre? Det er vist et 3. spørgsmål, som ikke skal besvares i denne tråd.

PS:
(Jeg kan se at jeg skal have ændret 5's til at være "test" idet mit distinkte ord er "test" jvf. initialisation i linjen "char testword = 'test';")
Avatar billede thomassoerensen Nybegynder
06. februar 2002 - 13:39 #8
Tak for svaret Soepro
Med lidt modifikationer pga. ændrede forudsætinger virker det nu. TAK

Her er den endelige kode:

-----------------------------------------------------------------
// ex03-03.cpp
// A program that counts how many times a distinct work appears in the input

#include <conio>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using std::cout;
using std::string;
using std::cin;
using std::endl;
using std::vector;
using std::count;

int main()

{
    // ask for input
    cout << "Please enter input to be analyzed (followed by \"EOF\"): ";
    vector<string> input;
    string inp;
   
    // invariant: input contains all the input words
    string eosChar = "EOF";
    while (cin >> inp && inp!= eosChar)
        input.push_back(inp);

    cout << endl << "The number of entries in the vector is " << input.size()
    << "!" << endl;
    int i = 0;
    string testword = "test";
    count(input.begin(), input.end(),testword,i);
    cout << "The number of test's in the input are: " << i;

    getch();
    return 0;
}
---------------------------------------------------------------
Som med input: et to test tre test fire test EOF
giver output: The number of entries in the vector is 6
              The number of test's in the input are: 3

Lige som det skal være
Tak igen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester