Solved

How to create substrings from a sentence string C++

Posted on 2008-10-23
10
910 Views
Last Modified: 2013-12-14
Ok this is what I am trying to do, in C++ language, I can create a string, what I want to go is take a sentence say "Here is a sentence that I want the program to use." How do I get the program to break each word into a substring so I can count the vowels in a loop, and then know to stop the loop when it gets to the .?
0
Comment
Question by:putyoursoxon
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 5
10 Comments
 
LVL 39

Expert Comment

by:itsmeandnobodyelse
ID: 22795510
You could use STL for example

#include <string>
using namespace std;

    ....

    string s = "Here is a sentence that I want the program to use.";
    s += ' ';   // add a space for easier parsing
    int pos1 = 0;
    int pos2 = 0;
    while ((pos2 = s.find_first_of(" ,.;/|", pos1)) != string::npos)
    {
         if (pos2 > pos1)
         {
              string sub = s.substr(pos1+1, pos2-pos1+1);
              // here you could store the found token to a vector, e.g by v.push_back(sub);
              if (s[pos2] == '.')   // ok we found the .
              {
               }
         }
    }
0
 
LVL 39

Expert Comment

by:itsmeandnobodyelse
ID: 22795521
I forgot to add

    pos1 = pos2 +1;

at end of loop.
0
 

Author Comment

by:putyoursoxon
ID: 22802736
I tried this, but this will not work correctly it includes the space and the first letter of the next word in the current word
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 39

Expert Comment

by:itsmeandnobodyelse
ID: 22803001
>>>> it includes the space and the first letter of the next word in the current word

Sorry, it should be

   pos2-pos1-1
0
 

Author Comment

by:putyoursoxon
ID: 22803062
Ok, let me write this into what I have so far and see how it goes, thanks
0
 

Author Comment

by:putyoursoxon
ID: 22804502
this also doesnt work does the same thing except it does it with the first word in a infinite loop
0
 
LVL 39

Accepted Solution

by:
itsmeandnobodyelse earned 500 total points
ID: 22806592
Take that
#include <string>
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
 
int tokenize(const string & sin, vector<string> & tokens, vector<char> & separators)
{
    string s = sin;
    s += char(0);    // add a 0 char for getting end-of-string parsing
    string seps = " ,.;/|";
    seps += char(0);    
    int pos1 = 0;
    int pos2 = 0;
    while ((pos2 = s.find_first_of(seps, pos1)) != string::npos) 
    {
         if (pos2 > pos1)
         {
              string sub = s.substr(pos1, pos2-pos1);
              tokens.push_back(sub);
              separators.push_back(s[pos2]);
        }
        pos1 = pos2+1;   // don't forget that or you'll get an infinite loop
    }
    return tokens.size();
}
 
int main()
{
       int i; 
       string s = "Here is a sentence that I want the program to use.";
       vector<string> substrings;
       vector<char>   separators;
 
       int n = tokenize(s, substrings, separators);
       for (i = 0; i < n; ++i)
       {
            char c = separators[i];
            cout << setw(3) << right << i+1 << " " << left << setw(20) <<  substrings[i] 
                 << " separated by " << int(separators[i]) << " " << separators[i] << endl;
       }
       cin >> i;
       return 0;
}

Open in new window

0
 

Author Closing Comment

by:putyoursoxon
ID: 31509452
im going to try a streamstring instead
0
 
LVL 39

Expert Comment

by:itsmeandnobodyelse
ID: 22807673
>>>> im going to try a streamstring instead
The problem with streaming is that you could go for one delimiter only. In your case it is a space. But then, the fulstop at end must be parsed separately.
0
 

Author Comment

by:putyoursoxon
ID: 22808132
With streamstring can I use a terminating character like . To count as the end of a sentence?
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
Jaspersoft Studio is a plugin for Eclipse that lets you create reports from a datasource.  In this article, we'll go over creating a report from a default template and setting up a datasource that connects to your database.
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.

717 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