Frage

Ich versuche herauszufinden, wie ich diese Zeichenfolge verwenden kann. "sstream"und c ++

Das Format davon lautet: "String, int, int".

Ich muss in der Lage sein, den ersten Teil der Zeichenfolge zuzuweisen, der eine IP -Adresse einer STD :: String enthält.

Hier ist ein Beispiel für diese Zeichenfolge:

std::string("127.0.0.1,12,324");

Ich müsste dann bekommen

string someString = "127.0.0.1";
int aNumber = 12;
int bNumber = 324;

Ich werde noch einmal erwähnen, dass ich nicht verwenden kann boost Bibliothek, gerecht sstream :-)

Vielen Dank

War es hilfreich?

Lösung

Hier ist eine nützliche Tokenisierungsfunktion. Es wird keine Streams verwendet, kann aber die Aufgabe, die Sie benötigen, durch die Spaltung der Zeichenfolge auf Kommas problemlos ausführen. Dann können Sie mit dem resultierenden Vektor von Token tun, was Sie wollen.

/// String tokenizer.
///
/// A simple tokenizer - extracts a vector of tokens from a 
/// string, delimited by any character in delims.
///
vector<string> tokenize(const string& str, const string& delims)
{
    string::size_type start_index, end_index;
    vector<string> ret;

    // Skip leading delimiters, to get to the first token
    start_index = str.find_first_not_of(delims);

    // While found a beginning of a new token
    //
    while (start_index != string::npos)
    {
        // Find the end of this token
        end_index = str.find_first_of(delims, start_index);

        // If this is the end of the string
        if (end_index == string::npos)
            end_index = str.length();

        ret.push_back(str.substr(start_index, end_index - start_index));

        // Find beginning of the next token
        start_index = str.find_first_not_of(delims, end_index);
    }

    return ret;
}

Andere Tipps

Das C ++ String Toolkit Library (STRTK) hat die folgende Lösung für Ihr Problem:

int main()
{
   std::string data("127.0.0.1,12,324");
   string someString;
   int aNumber;
   int bNumber;
   strtk::parse(data,",",someString,aNumber,bNumber);
   return 0;
}

Weitere Beispiele finden Sie Hier

Es ist nicht schick, aber Sie können STD :: Getline verwenden, um die Zeichenfolge zu teilen:

std::string example("127.0.0.1,12,324");
std::string temp;
std::vector<std::string> tokens;
std::istringstream buffer(example);

while (std::getline(buffer, temp, ','))
{
    tokens.push_back(temp);
}

Dann können Sie die erforderlichen Informationen aus den einzelnen getrennten Zeichenfolgen extrahieren.

Sie könnten auch so etwas tun, glaube ich (total von meinem Kopf, also entschuldige mich, wenn ich dort einige Fehler gemacht habe) ...

stringstream myStringStream( "127.0.0.1,12,324" );
int ipa, ipb, ipc, ipd;
char ch;
int aNumber;
int bNumber;
myStringStream >> ipa >> ch >> ipb >> ch >> ipc >> ch >> ipd >> ch >> aNumber >> ch >> bNumber;

stringstream someStringStream;
someStringStream << ipa << "." << ipb << "." << ipc << "." << ipd;
string someString( someStringStream.str() );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top