Solved

sorting substrings

Posted on 2000-04-10
9
183 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
Comment Utility
Again homework.
0
 
LVL 9

Accepted Solution

by:
jasonclarke earned 50 total points
Comment Utility
#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
Comment Utility
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
 

Author Comment

by:redgreenred
Comment Utility
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
Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

 
LVL 9

Expert Comment

by:jasonclarke
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

Unlike C#, C++ doesn't have native support for sealing classes (so they cannot be sub-classed). At the cost of a virtual base class pointer it is possible to implement a pseudo sealing mechanism The trick is to virtually inherit from a base class…
Often, when implementing a feature, you won't know how certain events should be handled at the point where they occur and you'd rather defer to the user of your function or class. For example, a XML parser will extract a tag from the source code, wh…
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.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

771 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

13 Experts available now in Live!

Get 1:1 Help Now