2012-10-22 7 views
3

Dire que j'ai ceci:équivalent sscanf Qt

QString mystring = "67 49 213 59"; 
int a, b, c, d; 

Y at-il une alternative à Qt sscanf donc je peux lire les nombres dans les variables int?

+0

En supposant que vous pouvez utiliser Boost, il existe une distribution lexicale, ainsi vous pouvez convertir des chaînes en entiers, ou d'autres formats numériques. Il faudra que vous divisiez votre chaîne en valeurs séparées, mais cela ne devrait pas être trop difficile. – thecoshman

+2

Je ne veux pas mélanger du code Qt avec boost, stdio ou std. Les styles sont totalement différents, et en plus, Qt est une bibliothèque assez complète. Je pense qu'il est généralement capable de remplacer complètement le runtime C et C++ en termes de fonctionnalités. – sashoalm

+0

Qu'est-ce que vous en avez besoin? Vous pouvez convertir QString à une chaîne C, en utilisant par exemple QString :: toLocal8Bit() et le nourrir à sscanf? –

Répondre

4

QTextStream fournit l'équivalent des flux de la bibliothèque standard. Ne pas oublier que le flux de texte doit être détruit avant la chaîne.

QString mystring = "67 49 213 59"; 
QTextStream myteststream(&mystring); 
int a = 0, b = 0, c = 0, d = 0; 
myteststream >> a >> b >> c >> d; 
+3

+1: Bien que cela puisse valoir la peine d'ajouter un point, cela équivaut à iostreams, pas à 'sscanf'. –

4
int a, b, c, d; 
QString s("67 49 213 59"); 
QTextStream(&s) >> a >> b >> c >> d; 
+0

Vous ne pouvez pas prendre l'adresse d'un temporaire comme vous le faites dans votre premier exemple. Si votre compilateur le permet, il ne devrait pas. –

+0

@Benjamin Lindley: oui, j'ai ajouté la syntaxe correcte dans la partie inférieure. GCC signale l'erreur et avertit d'un -strict. Mais je n'ai pas essayé si cela permettait d'accepter la syntaxe. Dois-je supprimer cette première ligne? – CapelliC

2
QString str("67 49 213 59"); 
QStringList list = str.split(" "); 
int a[list.count]; 
for (int i = 0; i < list.count; i++) 
    a[i] = list[i].toInt(); 
+1

Une explication pourrait être utile –

+0

-1: Le code sans prose est nocif. –

+0

Pour moi, cela ressemble à un exemple de code propre et répondre à la question. Le code est simple et simple. – ChristophK

1

vous pouvez toujours faire juste

QByteArray oString = mystring.toAscii(); 
const char *pszString = oString.constData(); 

puis utilisez sscanf() comme d'habitude.