मैं अपनी सी++ कक्षा के लिए एक असाइनमेंट पर काम कर रहा हूं, और मैं अपनी समस्या को हल करने के काफी करीब हूं। इस बिंदु पर, मुझे आउटपुट मिल रहा है जो मैं उम्मीद कर रहा था, इसलिए मुझे संदेह है कि मैं इस समस्या की मूल अवधारणा को गलत समझ सकता हूं। मेरे असाइनमेंट के जिस हिस्से पर मैं अभी काम कर रहा हूं, वह उपयोगकर्ता से एक फ़ाइल नाम प्राप्त करना है, उस फ़ाइल में पढ़ना है, और फिर मुख्य वर्णों को बदलते समय उस फ़ाइल को प्रदर्शित करना है। उदाहरण के लिए, :!, को एक नई लाइन बनाने के लिए '\n' से बदल दिया जाएगा। मुझे केवल iostream और fstream का उपयोग करने की अनुमति है, और सभी टेक्स्ट को चार सरणी [] के साथ संभाला जाना चाहिए। मेरे वर्तमान आउटपुट में, मुझे तीसरी लाइन पर एक अतिरिक्त जगह मिल रही है, और मुझे समझ में नहीं आता कि यह वहां कैसे हो रहा है। इस वजह से, मुझे लगता है कि मेरे दिमाग में तर्क गलत हो सकता है, और मैं सोच रहा था कि क्या कोई और अनुभवी प्रोग्रामर समझा सकता है कि मैं कहां गलत हो रहा हूं। क्या मैं सही दिशा में जा रहा हूँ?

यहाँ पाठ फ़ाइल है जिसका मैं अभ्यास के रूप में उपयोग कर रहा हूँ: 1.txt

Type, type, type away :!
compile.
Run.
Hip hip hooray! :! No errors today! :!

यह उसी फ़ाइल का अपेक्षित आउटपुट है: 1.txt

Type, type, type away
compile. Run. Hip hip hooray! 
No errors today!

यह वह आउटपुट है जो मुझे मिल रहा है

Type, type, type away
compile. Run. Hip hip hooray! 
 No errors today! <<-------- extra space at the beginning!

मैं नीचे अपना कोड पेस्ट करूंगा, किसी भी तरह से इसकी आलोचना करने के लिए स्वतंत्र महसूस करें।

#include <iostream>
#include <fstream>
using namespace std;
#define MAX 1024 // this is the maximum allowed number of char in a file.
                 // is it a bad idea to define it as a constant?

int main()
{
    char fileName[256];
    char data[MAX];
    int readFile(char fileName[],char data[]);
    void display(char data[], int counter);
    fstream file;

    cout << "File Name: ";
    cin >> fileName;

    int counter = readFile(fileName, data);
    display(data, counter);

    return 0;
}

int readFile(char fileName[], char data[])
{
    ifstream file;
    file.open(fileName);

    int count = 0;
    while(file.get(data[count]) && count < MAX)
    {
        count++;
    }
    file.close();
    return count;
}

void display(char data[], int counter)
{
    char formatText(char data[], int count);
    for(int i = 0; i < counter; i++)
    {
        if(data[i] == '\n') // I added this if statment in because the newline
        {                   // from the file was getting read, AND the :! was
            data[i] = '\0'; // becoming \n, printing out TWO new lines!
        }

    }
    for(int i = 0; i < counter; i++)
    {
        formatText(data, i);

        if(data[i] != ':') // All tokens have a : before, So i dont want to 
            cout << data[i]; // print out the :'s.
    }
}

char formatText(char data[], int count)
{
    if(data[count] == ':')
    {
        switch(data[count + 1]) // these are the three tokens I have been given,
        {                       // but it has to be expandable for more later.
            case '!': data[count + 1] = '\n';
                break;
            case '<': data[count + 1] = '\"';
                break;
            case '>': data[count + 1] = '\"';
                break;
        }
    }

}

मुझे खेद है कि अगर इसका उत्तर किसी अन्य पोस्ट में दिया गया है, तो मैं अपने प्रश्न का उत्तर खोजने (या संभवतः समझने) में असमर्थ था। आपके समय और धैर्य के लिए आपका धन्यवाद।

0
Liam Ihasz 20 नवम्बर 2018, 08:08

1 उत्तर

सबसे बढ़िया उत्तर
Type, type, type away :!
compile.
Run.
Hip hip hooray! :! No errors. today! :!

ठीक है। फ़ॉर्मेटिंग में आप जो पहली चीज़ करते हैं, वह है कैरेक्टर ऐरे में सभी न्यूलाइन्स '\n' को हटा देना और जो आपको छोड़ देता है

Type, type, type away :!compile.Run.Hip hip hooray! :! No errors today! :!

तो आप सभी !' से पहले :'s को '\n' से बदल देते हैं, लेकिन यदि आप देखते हैं कि इस स्थिति में आपके सभी :!'s में अगली अनुक्रमणिका स्थिति में एक गैर-व्हाट्सएप वर्ण है, तो एक को बचाएं।

 :! No errors

और यह आपकी त्रुटि है, क्योंकि यह आपके अनुक्रम को \n No errors के रूप में बदल देता है

अपना इनपुट डेटा बदल रहा है

Type, type, type away :!
compile.
Run.
Hip hip hooray! :!No errors today! :!

उस अतिरिक्त स्थान की समस्या को ठीक करता है।

2
johnathan 20 नवम्बर 2018, 06:28