Solved

sorting substrings

Posted on 2000-04-10
9
187 Views
Last Modified: 2010-04-02
I want to read a string from the file. Whole String: we, thank, you,

I want out put in the form of

Thank, you, we,
We, thank, you,
You, thank, we,

Note: Resulted strings are combination of their words and are arranged in alphabetical order i.e. t, w, y.


0
Comment
Question by:redgreenred
9 Comments
 
LVL 14

Expert Comment

by:AlexVirochovsky
ID: 2700732
Again homework.
0
 
LVL 9

Accepted Solution

by:
jasonclarke earned 50 total points
ID: 2700771
#pragma warning(disable:4786)

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

vector<string>
ExtractAndSortWords(const std::string& line)
{
    const string delims = " \t,";

    vector<string> words;

    string::size_type begIdx = line.find_first_not_of(delims);
    while (begIdx != string::npos)
    {
        string::size_type endIdx = line.find_first_of(delims, begIdx);

        words.push_back(line.substr(begIdx, endIdx-begIdx));

        begIdx = line.find_first_not_of(delims, endIdx);
    }

    std::sort(words.begin(), words.end());  
       
    return words;
}


int main(int argc, char* argv[])
{
    string line = "we, thank, you";

    vector<string> sortedWords = ExtractAndSortWords(line);

    for (size_t i=0; i<sortedWords.size(); i++)
    {
        cout << sortedWords[i] << endl;
    }

    return 0;
}

0
 
LVL 11

Expert Comment

by:mikeblas
ID: 2701038
This doesn't generate the sample output that redgreenred asked for.  (In fact, I'm not sure exactly what redgreenred is asking for.)

..B ekiM
0
ScreenConnect 6.0 Free Trial

Want empowering updates? You're in the right place! Discover new features in ScreenConnect 6.0, based on partner feedback, to keep you business operating smoothly and optimally (the way it should be). Explore all of the extras and enhancements for yourself!

 

Author Comment

by:redgreenred
ID: 2701103
What I am asking is to break a string into different combinations of its substrings like

string: aa, bb, cc,

I want my output as

aa, bb, cc,
bb, cc, aa,
cc, aa, bb,


I havent tried the above code, if it is working for the fixed string then I just have to alter it to read from the text file. But let me try it first.

thanks
0
 
LVL 9

Expert Comment

by:jasonclarke
ID: 2701716
OK, I missed part of what you were saying, your first message said that the words should be sorted, the code I gave sorts the words.

If you want all possible combinations of the set of words, the basic structure of what I gave is OK, since it extracts the words from the text, but you will need to add some code to generate the other combinations.

Obviously there are going to be an awful lot of combinations for anything but a small number of words.
0
 

Author Comment

by:redgreenred
ID: 2701896
the code is only breaking a string into three parts and then doing the sorting.

My requirement was to convert the string like this


we, thank, you
thank, you, we
you, we, thank

and then do sorting on the new strings.

thanks
0
 
LVL 9

Expert Comment

by:jasonclarke
ID: 2703168
its still not clear what you want.  what do you mean by 'and then do sorting on the new strings'.

You just seem to have combinations of the words.
0
 
LVL 9

Expert Comment

by:jasonclarke
ID: 2703243
ok, I think I understand finally, replace the main program above with the following:

int main(int argc, char* argv[])
{
    string line = "we, thank, you";

    vector<string> sortedWords = ExtractAndSortWords(line);

    vector<string> permutations;

    while (next_permutation(sortedWords.begin(), sortedWords.end()))
    {
        std::string perm;
        for (size_t i=0; i<sortedWords.size(); i++)
        {
            perm += sortedWords[i];
            if (i < sortedWords.size()-1) perm += ", ";
        }
        permutations.push_back(perm);
    }

    std::sort(permutations.begin(), permutations.end());
    for (size_t i=0; i<permutations.size(); i++)
    {
        cout << permutations[i] << endl;
    }
    return 0;
}
0
 
LVL 9

Expert Comment

by:jasonclarke
ID: 2703265
sorry, I noticed that the previous code misses the first permutation.  Here is the corrected code:

int main(int argc, char* argv[])
{
    string line = "we, thank, you";

    vector<string> sortedWords = ExtractAndSortWords(line);

    vector<string> permutations;

    bool morePermutations = (sortedWords.size() > 0);
    while (morePermutations)
    {
        std::string perm;
        for (size_t i=0; i<sortedWords.size(); i++)
        {
            perm += sortedWords[i];
            if (i < sortedWords.size()-1) perm += ", ";
        }
        permutations.push_back(perm);
        morePermutations = next_permutation(sortedWords.begin(), sortedWords.end());
    }

    std::sort(permutations.begin(), permutations.end());
    for (size_t i=0; i<permutations.size(); i++)
    {
        cout << permutations[i] << endl;
    }
    return 0;
}
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
C language IDE – Compilers installation 14 71
convert char array to number in c 5 85
Socket Programming (Unix) 8 129
Create a path if not exists 7 78
  Included as part of the C++ Standard Template Library (STL) is a collection of generic containers. Each of these containers serves a different purpose and has different pros and cons. It is often difficult to decide which container to use and …
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…
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

821 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