Solved

How to create substrings from a sentence string C++

Posted on 2008-10-23
10
903 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
  • 5
  • 5
10 Comments
 
LVL 39

Expert Comment

by:itsmeandnobodyelse
Comment Utility
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
Comment Utility
I forgot to add

    pos1 = pos2 +1;

at end of loop.
0
 

Author Comment

by:putyoursoxon
Comment Utility
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
 
LVL 39

Expert Comment

by:itsmeandnobodyelse
Comment Utility
>>>> 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
Comment Utility
Ok, let me write this into what I have so far and see how it goes, thanks
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 

Author Comment

by:putyoursoxon
Comment Utility
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
Comment Utility
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
Comment Utility
im going to try a streamstring instead
0
 
LVL 39

Expert Comment

by:itsmeandnobodyelse
Comment Utility
>>>> 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
Comment Utility
With streamstring can I use a terminating character like . To count as the end of a sentence?
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Introduction This article is the first in a series of articles about the C/C++ Visual Studio Express debugger.  It provides a quick start guide in using the debugger. Part 2 focuses on additional topics in breakpoints.  Lastly, Part 3 focuses on th…
Programmer's Notepad is, one of the best free text editing tools available, simply because the developers appear to have second-guessed every weird problem or issue a programmer is likely to run into. One of these problems is selecting and deleti…
The viewer will learn how to use and create new code templates in NetBeans IDE 8.0 for Windows.
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…

762 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

7 Experts available now in Live!

Get 1:1 Help Now