1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include <cstring> // strlen
#include <iostream>
#include <algorithm>
int main()
{
char s[] = "+CCLK: 14/12/09 22:23:45+0";
typedef const char * iterator;
{
iterator end = s + strlen(s);
iterator first = s /*+ 7 si on est sûr que "+CCLK: " est toujours au début*/;
while (*first) {
iterator last = std::find(first, end, ' ');
// [first, first+n] avec n = last - first
(std::cout << '"').write(first, last - first) << "\"\n";
first = *last ? last + 1 : last; // ou std::find_if(last, end, [](char c) { return c != ' '; });
}
}
endl(std::cout);
// en suposant que le format est toujours valide:
{
iterator end = s + strlen(s);
iterator first1 = s + 7;
iterator last1 = std::find(first1, end, ' ');
(std::cout << '"').write(first1, last1 - first1) << "\"\n";
std::cout << '"' << (last1+1) << "\"\n";
}
endl(std::cout);
// en modifiant la chaîne d'origine pour donner une impression de split
{
char * s1 = s + 7;
char * end = s1 + strlen(s1);
char * last1 = std::find(s1, end, ' ');
char * s2 = last1+1;
*last1 = '\0';
std::cout << '"' << s1 << "\"\n";
std::cout << '"' << s2 << "\"\n";
}
} |