Solved

Visual c++:  populating a string array with values from a data file..

Posted on 2004-05-01
15
1,174 Views
Last Modified: 2013-12-14
Ok--

This seems easy, but apparently I've overlooked something.  
What I'm trying to do is this:

1.  I have to read the contents of a *.dat file (in this case the file contains 12 names, each on its own line right after one another)
2.  Use a bubble sort routine to put the names in ascending order
3.  display the sorted files to the screen

simple, right?
The bubble sort is not a problem if I could get these strings into an array.  Then I would use string class method swap to do the rest.

I'm runnning into problems when I try populating the string array.  I'm not getting compiler errors, but when I test outputing the array I get nothing.  I've written stuff before using character arrays to do the same thing, but I can't do this here.  I've looked in this forum and elseware but nothing I've found difinitively explains how a string array works.  My text book has nothing on this, either, nor was this ever discussed in my class.  I've tried double scripted arrays, but that didn't work either.  Please help...This will be on my Monday's exam.  This is NOT a homework assignment.

Thanks in advance,

r3r

int element=0;
ifstream inFile("strings.dat", ios::in); //declare ifstream object
string stringInput;  //string variable placeholder
string sArray[30];  //string array to hold 30 strings

inFile.clear();   //clear EOF
inFile.seekg(0);  //start reading at beginning of file




while (inFile >> stringInput)
{
      sArray[element] = stringInput;
     
               ++element;
      cout << "stringInput = " << stringInput << endl; //testing output...  Nothing displays here????
      cout << "sArray = "<< sArray[element] << endl;   //testing output...  Nothing displays here, either
}

cout << sArray[3] << endl //more testing  
     << sArray[6] <<endl; //more testing


 

     
0
Comment
Question by:r3r
  • 5
  • 5
  • 4
15 Comments
 
LVL 86

Accepted Solution

by:
jkr earned 250 total points
ID: 10969978
Try

while (!inFile.eof())
{

    getline ( inFile, stringInput);
    sArray[element] = stringInput;
   
               ++element;
    cout << "stringInput = " << stringInput << endl; //testing output...  Nothing displays here????
    cout << "sArray = "<< sArray[element] << endl;   //testing output...  Nothing displays here, either
}
0
 
LVL 30

Assisted Solution

by:Axter
Axter earned 250 total points
ID: 10969983
Try the following instead.

int element=0;
ifstream inFile("strings.dat", ios::in); //declare ifstream object
string stringInput;  //string variable placeholder
string sArray[30];  //string array to hold 30 strings

while (std::getline(inFile, stringInput))

    sArray[element] = stringInput;
   
     cout << "stringInput = " << stringInput << endl; //testing output...  Nothing displays here????
    cout << "sArray = "<< sArray[element] << endl;   //testing output...  Nothing displays here, either
              ++element;//Put this after out put.
}
0
 
LVL 30

Expert Comment

by:Axter
ID: 10969986
As usual, jkr get it first.

However, don't forget to move the ++element
0
 
LVL 86

Expert Comment

by:jkr
ID: 10969990
>>++element;//Put this after out put.

Good point.
0
 
LVL 86

Expert Comment

by:jkr
ID: 10969993
>>As usual, jkr get it first

Don't blame that on me, the TV program in the morning here is just awful :o)
0
 

Author Comment

by:r3r
ID: 10970047
Hmmm... OK, now I really feel stupid.

jkr: when I try your example I get the same result:  nothing prints out

Axter:  Your code gives me a compiler error (sorry!)  

There must be something else I'm not doing or haven't included in the header.  Both your codes make sense to me.  I don't think either of you are wrong.  Here's the entire code, including the header

// general code to test how string class works

#include <iostream>
using namespace std;

#include <iomanip>
using std::setw;

#include <fstream>
using std::ofstream;
using std::ifstream;
using std::fstream;

#include <string>
using namespace std;

#include <sstream>
using std::istringstream;
using std::ostringstream;

#include <new>


int main(){
int element=0;
ifstream inFile("strings.dat", ios::in); //declare ifstream object
string stringInput;  //string variable placeholder
string sArray[30];  //string array to hold 30 strings

inFile.clear();   //clear EOF
inFile.seekg(0);  //start reading at beginning of file


// jkr's code~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

while (std::getline(inFile, stringInput)){

    sArray[element] = stringInput;
   
     cout << "stringInput = " << stringInput << endl; //testing output...  Nothing displays here????
    cout << "sArray = "<< sArray[element] << endl;   //testing output...  Nothing displays here, either
              ++element;//Put this after out put.
}

// jkr's code~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Axter's code~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
while (!inFile.eof())
{
      getline ( inFile, stringInput);
    sArray[element] = stringInput;
    cout << "stringInput = " << stringInput << endl; //testing output...  Nothing displays here????
    cout << "sArray = "<< sArray[element] << endl;   //testing output...  Nothing displays here, either
      ++element;
}

// Axter's code~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cout << sArray[3] << endl //more testing
     << sArray[6] <<endl  //more testing
     << stringInput;
 
 



system ("pause");
return 0;
  }
0
 

Author Comment

by:r3r
ID: 10970061
Ok, I goofed.  The friggin name of my text file is string.dat, not strings.dat

Gee, helps when you try to open the right file!

code works fine.  Thanks guys.
0
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 30

Expert Comment

by:Axter
ID: 10970062
Exactly what compiler error are you getting?

What line is giving you the compile error?
0
 

Author Comment

by:r3r
ID: 10970075
Axter,

because I was trying to open the wrong file I was getting,
Unhandled exception at 0x0041f456 in LAB_12 String Class.exe: 0xC0000005: Access violation writing location 0xcccccccc.

Once I changed to the file name to the CORRECT name (Doh!) it went away.  Sorry for the mix up, and thanks

r3r
0
 
LVL 86

Expert Comment

by:jkr
ID: 10970080
*Cough* this would have been an excellent candidate for a split - Axter mentioning "++element;//Put this after out put." for sure contributed to this solution.
0
 

Author Comment

by:r3r
ID: 10970097
jkr,
OK, I'm new to this forum and I should have read and understood all the policies and procedures before I started posting, my mistake.  Can I email the moderator and as him to split the points since they have already been assigned?

sorry, axter!

r3r

0
 
LVL 30

Expert Comment

by:Axter
ID: 10970126
You can post a request at the Community Support topic area.

http://oldlook.experts-exchange.com:8080/Community_Support/
0
 

Author Comment

by:r3r
ID: 10970141
Axter,

I asked the points to be equally split between you and rjr.  I appreciate the help.
r3r

0
 
LVL 30

Expert Comment

by:Axter
ID: 10970147
>>I asked the points to be equally split between you and rjr.  I appreciate the help.

Glad to help.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Update (December 2011): Since this article was published, the things have changed for good for Android native developers. The Sequoyah Project (http://www.eclipse.org/sequoyah/) automates most of the tasks discussed in this article. You can even fin…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
The viewer will learn how to use NetBeans IDE 8.0 for Windows to connect to a MySQL database. Open Services Panel: Create a new connection using New Connection Wizard: Create a test database called eetutorial: Create a new test tabel called ee…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now