467,169 Members | 968 Online
Bytes | Developer Community
Ask Question

Home New Posts Topics Members FAQ

Post your question to a community of 467,169 developers. It's quick & easy.

number of words in a line

hi
I have a data file with equal number of columns for each row. I need
to get the number of rows and columns to allocate a matrix in gsl.

getline (in, line) and parse the line for the number of spaces then
add one to get the number of words then
number_of_rows = 1;
while getline (in, line) and number_of_rows++ does the number of rows

I am not sure how to go about the number of words task, is there a c++
approved regex for c++?
because
string word
while(in >word) count++ will go through the whole file. I just want
one line.

thanks
Jul 21 '06 #1
  • viewed: 2957
Share:
6 Replies
Gary Wessle <ph****@yahoo.comwrites:
hi
I have a data file with equal number of columns for each row. I need
to get the number of rows and columns to allocate a matrix in gsl.

getline (in, line) and parse the line for the number of spaces then
add one to get the number of words then
number_of_rows = 1;
while getline (in, line) and number_of_rows++ does the number of rows

I am not sure how to go about the number of words task, is there a c++
approved regex for c++?
because
string word
while(in >word) count++ will go through the whole file. I just want
one line.

thanks
I tried
ifstream in(file_name.c_str());
string line = getline(in, line);
stringstream input( line.c_str() );

string word;
nCol = 0;
while(inpput >word)
nCol++;

did not do it
Jul 21 '06 #2
Hi Gary
This is just a thought, but why don't you put a counter on every time a
space is found?

As long as you properly detect when to exit your loop, that should
suffice.

Gary Wessle wrote:
Gary Wessle <ph****@yahoo.comwrites:
hi
I have a data file with equal number of columns for each row. I need
to get the number of rows and columns to allocate a matrix in gsl.

getline (in, line) and parse the line for the number of spaces then
add one to get the number of words then
number_of_rows = 1;
while getline (in, line) and number_of_rows++ does the number of rows

I am not sure how to go about the number of words task, is there a c++
approved regex for c++?
because
string word
while(in >word) count++ will go through the whole file. I just want
one line.

thanks

I tried
ifstream in(file_name.c_str());
string line = getline(in, line);
stringstream input( line.c_str() );

string word;
nCol = 0;
while(inpput >word)
nCol++;

did not do it
Jul 21 '06 #3
***************************

File *inFile;
char *buff;
char temp=0;
int i=0;
int ctr=0;

buff=(char *)(malloc(sizeof(1024));

inFile=fopen("input.txt","r");
fgets(buff, 1024, inFile);

while(!feof(inFile))
{
i=0;
while(temp!='\n')
{
temp=buff[i]; //Iterating through the buffered line, looking for a
space
if(temp==32) //32 is the ascii for a space
ctr++;
i++;
}
ctr++; //This accounts for the last word in the line, since it's not
//followed by a space

fgets(buff, 1024, inFile);
}

fclose(inFile);

***************************
I haven't tested that, but it should work, or should be very close to
working.
There may be minor areas.

The number of words will be in ctr at the fclose, at least
theoretically.

Hope that helps.

as****@purdue.edu wrote:
Hi Gary
This is just a thought, but why don't you put a counter on every time a
space is found?

As long as you properly detect when to exit your loop, that should
suffice.

Gary Wessle wrote:
Gary Wessle <ph****@yahoo.comwrites:
hi
I have a data file with equal number of columns for each row. I need
to get the number of rows and columns to allocate a matrix in gsl.
>
getline (in, line) and parse the line for the number of spaces then
add one to get the number of words then
number_of_rows = 1;
while getline (in, line) and number_of_rows++ does the number of rows
>
I am not sure how to go about the number of words task, is there a c++
approved regex for c++?
because
string word
while(in >word) count++ will go through the whole file. I just want
one line.
>
thanks
I tried
ifstream in(file_name.c_str());
string line = getline(in, line);
stringstream input( line.c_str() );

string word;
nCol = 0;
while(inpput >word)
nCol++;

did not do it
Jul 21 '06 #4
as****@purdue.edu writes:
***************************

File *inFile;
char *buff;
char temp=0;
int i=0;
int ctr=0;

buff=(char *)(malloc(sizeof(1024));

inFile=fopen("input.txt","r");
fgets(buff, 1024, inFile);

while(!feof(inFile))
{
i=0;
while(temp!='\n')
{
temp=buff[i]; //Iterating through the buffered line, looking for a
space
if(temp==32) //32 is the ascii for a space
ctr++;
i++;
}
ctr++; //This accounts for the last word in the line, since it's not
//followed by a space

fgets(buff, 1024, inFile);
}

fclose(inFile);

***************************
I haven't tested that, but it should work, or should be very close to
working.
There may be minor areas.

The number of words will be in ctr at the fclose, at least
theoretically.

Hope that helps.
thanks, I will try to convert it to c++ since I am learning that now,
and test it, but I understand the idea.
my solution was

****************
void No_of_Rows_Cols() {
ifstream in(file_name.c_str());
string line;
getline(in, line);
stringstream input( line.c_str() );

string word;
nCol = 0;
while(input >word)
nCol++;

nRows = 1;
while (getline(in, line))
nRows++;
}
****************
Jul 21 '06 #5
Theoretically, all of C can be used in C++.

If you throw that into a cpp file, it should still work.

But glad it helped! If it doesnt let me know and I'll throw it into a
compiler and see what I can do.
Gary Wessle wrote:
as****@purdue.edu writes:
***************************

File *inFile;
char *buff;
char temp=0;
int i=0;
int ctr=0;

buff=(char *)(malloc(sizeof(1024));

inFile=fopen("input.txt","r");
fgets(buff, 1024, inFile);

while(!feof(inFile))
{
i=0;
while(temp!='\n')
{
temp=buff[i]; //Iterating through the buffered line, looking for a
space
if(temp==32) //32 is the ascii for a space
ctr++;
i++;
}
ctr++; //This accounts for the last word in the line, since it's not
//followed by a space

fgets(buff, 1024, inFile);
}

fclose(inFile);

***************************
I haven't tested that, but it should work, or should be very close to
working.
There may be minor areas.

The number of words will be in ctr at the fclose, at least
theoretically.

Hope that helps.

thanks, I will try to convert it to c++ since I am learning that now,
and test it, but I understand the idea.
my solution was

****************
void No_of_Rows_Cols() {
ifstream in(file_name.c_str());
string line;
getline(in, line);
stringstream input( line.c_str() );

string word;
nCol = 0;
while(input >word)
nCol++;

nRows = 1;
while (getline(in, line))
nRows++;
}
****************
Jul 21 '06 #6

as****@purdue.edu wrote:
Theoretically, all of C can be used in C++.
This is absolutely false.

Jul 23 '06 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

reply views Thread by Slowjam | last post: by
20 posts views Thread by dmurray14@gmail.com | last post: by
11 posts views Thread by elrondrules@gmail.com | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.