1

次のコードを書くことができました。

#include <iostream>
#include <vector>
#include <string>
using namespace std;    
int main()
{
    string sentence;
    getline(cin, sentence);
    char* ptr = &sentence[0];
    while ( *ptr != '\0' ){
        if ( *ptr == ' ' ){
            cout << endl;
        }
        else{
            cout << *ptr;
        }
        ptr++;
    }
}

それを使用して、文の各単語を個別に印刷できます。ただし、それらを保存してから取得したい。実行例は次のとおりです。

Enter the sentence:This is a sample sentence.
Which word do you want to see ?:4
sample

上記のコードから先に進む方法がわかりません。各文字を char 配列に格納し、これらの配列を文字列に変換してに格納することを考えましたvector<string>が、理解できませんでした。

指定されたライブラリのみを使用し、可能であれば分割関数を使用せずに実行したいと考えています。

編集:これは私が最近試したものです.しかし、動作しません.

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main()
{
    char letter;
    vector<string> words;
    vector<char> temp;
    vector<char> sentence;
    while( cin >> letter ){   // ctrl-z to break
        sentence.push_back(letter);
    }
    char* ptr = &sentence[0];
    while ( *ptr != '\0'){
        while ( *ptr != ' ' ){
            temp.push_back(*ptr);
            ptr++;
        }
        words.push_back(str(temp));
    }

}

EDIT2:これはsstreamを使用したソリューションです

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
int main()
{
    cout << "Sentence: " << endl;
    string sentence;
    getline(cin, sentence);
    istringstream sin(sentence);
    vector<string> tokens;
    string word;
    while (!sin.eof()){
        sin >> word;
        tokens.push_back(word);
    }
    cout << "Which word ?: " << endl;
    int n;
    cin >> n;
    cout << tokens[n - 1] << endl;
}

EDIT3: Rite、わかりました。ここに私が望んでいた解決策があります。

#include <iostream>
#include <string>
using namespace std;
int wordbyword(string sentence, char** words)
{
    int i = 0, j = 0, k = 0;
    while (sentence[i] != '\0'){
        if (sentence[i] != ' '){
            words[j][k] = sentence[i];
            k++;
        }
        else {
            j++;
            k = 0;
        }
        i++; 

    }
    return j;   
}

    int main()
    {
        string sentence;
        cout << "Sentence: "<< endl;
        getline(cin, sentence);
        int size = sentence.length();
        char** words = new char*[size];
        for ( int i = 0; i < size; i++)
            words[i] = new char[size];

        int wordCount = wordbyword(sentence, words) + 1;    
        while(1){
            cout << "Word number: " << endl;
            int n;
            cin >> n;
            if ( n == 0){
                cout << "Terminating..." << endl;
                break;
            }
            else if ( n > wordCount || n < 0)
                cout << "Word doesn't exist" << endl;
            else
                cout << words[n - 1] << endl;
            }

    }
4

2 に答える 2

3

それをベクトルにコピーしたい:

istringstream iss(sentence);
vector<string> tokens;
copy(istream_iterator<string>(iss),
     istream_iterator<string>(),
     back_inserter<vector<string> >(tokens));
于 2013-06-05T15:52:20.420 に答える