Как читать отдельные символы и выводить при вводе двухсимвольной последовательности?используя цикл while и C ++ - PullRequest
0 голосов
/ 17 октября 2018

Я сейчас пытаюсь написать программу, которая читает отдельные символы и запрашивает пользователя, когда двухсимвольная последовательность "cs" открыла дверь.Я застрял на том, где или как сохранить текущее значение и вывести ответ после того, как строка полностью прочитана.

Чтение данных из блокнота:

cs
imacsmajor
css
ab
decds

Желаемый результат:

cs open door
imacsmajor открытая дверь
css открытая дверь
ab закрытая дверь
десятичная дверь закрыта

код, написанный на данный момент:

// file: opendoor.cpp

#include <conio.h>

#include <fstream>// requires for external file streams 

#include <iostream>

using namespace std; 
// Associating program identifiers with external file names 
#define in_file  "data.txt"
#define out_file "resline.txt" 

void main()
{
const char nwln = '\n';  // print a new line 

ifstream ins;  // associates ins as an input stream  ofstream outs; 
ofstream outs; // associates outs as an output stream 

int  door = 0;  
char  current, previous = ' ', password;

ins.open(in_file);
outs.open(out_file);   

// Repeat processing until end of file is reached 
ins.get(current);  

while (!ins.eof())  
    {     
        cout << current ;
        // read a character   
        while (current != '\n')  
            {    
                ins.get(current);       
                cout << current ;  
            }
    } 
_getch();  
ins.close();    // closing input file 
outs.close();   // closing output file
}  // end main 

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Это мой код.для всех, кто борется.

//file: dooropen.cpp
#include <conio.h>
#include <iostream>
#include <fstream>// requires for external file streams
using namespace std; // Associating program identifiers with external file names
#define in_file  "data.txt" 
#define out_file "resline.txt"
void main()
{
    const char nwln = '\n';  // print a new line
    ifstream ins;  // associates ins as an input stream  
    ofstream outs; // associates outs as an output stream 
    int count = 0;
    int  door = 0;
    int isc = 0;
    char  current, previous = ' ';
    ins.open(in_file);
    outs.open(out_file);    // Repeat processing until end of file is reached 

ins.get(current);

while (!ins.eof())
{
    cout << current;// read a character   
    while (current != '\n')
    {
        if (current == 'c')
        {
            isc = count;
        }
        if (current == 's')
        {
            if (count == isc + 1)
            {
                door = 1;
            }
        }
        ins.get(current);
        cout << current;
        count++;
    }
    if (door == 1)
    {
        cout << ". . . . . . . . . . . . . . . . Door open \n";
    }
    else
    {
        cout << ". . . . . . . . . . . . . . . . Door closed \n";
    }
    door = 0;
    isc = 0;
    ins.get(current);
}
_getch();
ins.close();    // closing input file 
outs.close();   // closing output file
}  // end main
0 голосов
/ 17 октября 2018

Все, что вам нужно сделать, это проверить, есть ли в вашей заданной строке c, и если вы найдете s сразу после того момента, когда вы нашли c, тогда у вас есть ответ.

Также, как вы, возможно, знаете, строка по сути является массивом * 1006. *

В коде этот алгоритм может выглядеть примерно так:

std::string s = "abcdcsg";

// string is essentially a char array to begin with

for (int i = 0; i< s.length(); i++)
{
    if (s[i] == 'c')
    {
       i+=1;
       if(s[i]=='s'){
         //found
         break;
       }
    }
}
...