Je veux concatez deux cordes, mais je reçois une erreur que je ne comprends pas comment surmonter cette erreur.
Y a-t-il un moyen de convertir ce const Char * en Char? Devrais-je utiliser une certaine déséroférience? P> Cependant, si j'essaie de constituer une chaîne "bas" de cette façon, cela fonctionne: P> #include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <iterator>
#include <sstream>
int main(int argc, char* argv[]) {
ifstream file("file.txt");
vector<string> mapa;
string line, top, bottom;
while(getline(file,line)){
mapa.push_back(line);
}
string tmp;
for(int i = 0; i < mapa.size(); i++)
{
tmp = mapa[i];
for(int j = 0; j < tmp.size(); j++)
{
if(tmp[j] != ' ')
{
top += "+---";
bottom += "| " + tmp[j] + " ";
} else {
}
}
cout << top << endl;
cout << bottom << endl;
}
return 0;
}
7 Réponses :
semble que votre problème est sur cette ligne:
bottom += std::string("| ") + tmp[j] + " ";
Désolé, cette erreur est venue alors que je copié le code. Ce n'est pas à cela.
@chris pourriez-vous être plus précis?
@booka, Oups, j'ai oublié des missions d'aller à gauche, de sorte que cela ne fonctionne toujours pas. Vous avez i> pour convertir le premier ou le deuxième à une chaîne.
On dirait que vous manquez A + entre TMP [J] et "". La ligne doit lire
Désolé, cette erreur est venue alors que je copié le code. Ce n'est pas à cela.
ici: Vous essayez de résumer un Si vous souhaitez tout avoir dans une ligne, il suffit de faire: p> Maintenant, l'expression ci-dessus sur le côté droit de l'affectation sera évaluée comme suit: p> depuis Finalement, le résultat de l'expression entière char code> et un pointeur sur
char code>. Cela ne fonctionnera pas (il n'entraînera pas la concaténation du caractère et du littéral à chaîne pointu). Et la même chose est vraie si vous ajoutez un signe
+ code> après
TMP [j] code>, car cela sera toujours évalué (des parenthèses supplémentaires ajoutées pour souligner le fait que
opérateur + code> associé à gauche): p>
opérateur + code> pour un < code> std :: string code> et a
char code> est défini et renvoie un
std :: string code>, le résultat de l'évaluation de la sous-expression entre parenthèses sera un
std :: string code>, qui est ensuite additionné à la chaîne littéral
"" code>, retourner (à nouveau) un
std :: string p >
(STD :: String ("|") + TMP [J]) + "" code> est donné en entrée sur
opérateur + = < / code>. p> p>
Les parenthèses supplémentaires ne sont pas nécessaires, car opérateur + code> est de gauche à droite.
Vrai. Mais je ne pense pas à compter sur l'associativité de l'opérateur afin d'obtenir ce que vous voulez sortir du compilateur est souhaitable, d'autant plus que puisqu'il est clair que l'OP ne voit pas pourquoi c'est important ...
@chris: J'ai ajouté que juste pour clarifier des choses
"Vous essayez de résumer un char et un pointeur à char. Cela ne fonctionnera pas" Oui, cela va ajouter la valeur du caractère au pointeur. Pas ce que vous vouliez mais très légal dans C.
Cela fonctionnera, mais cela ne concatéra pas la chaîne - donc ce n'est pas ce que vous vouliez. Essayez printf ("SuperCalifragilisticepsialidocious supercalifragilisticepxpiCious" + 'a'); pour un exemple tordu.
Le problème est
bottom += "| "
Gardez à l'esprit que la compilée évaluera le côté droit de l'instruction EQUALLS, et puis em> utiliser Ainsi, le compilateur essaie d'évaluer à la place, vous devez concaténer la pièce par pièce, de sorte que Le compilateur sait à regarder dans string :: opérateur + = code> sur que em> >.
"|" + tmp [j] + "" code>. Ce qu'il voit est une chaîne C, un char et une autre c-string. Il n'y a aucun moyen que le compilateur puisse ajouter ceux-ci dans tout em> de manière qui a du sens pour ce que vous essayez de faire. P>
String code> pour l'opérateur, qui est surchargé pour concaténer les chaînes ou convertir les chaînes C en cordes C ++ afin que le compilateur sait utiliser des chaînes C ++: P >
bottom += string("| ") + tmp[j] + string(" ");
Je le ferais avec les instructions de 3 + = code> pour être claire. Juste ma préférence personnelle.
Merci @robert Je n'ai aucune expérience donc c'est très précieux pour moi.
char buffer[5]; sprintf(buffer, "| %c ", tmp[j]); bottom += buffer;
Parce que vous voulez ajouter un pointeur et un caractère, et une telle opération est illégale. Si vous ne voulez pas le faire en une seule ligne, vous pouvez l'essayer comme ceci: p>
ficelle bas = ""; bas = bas + "|" + TMP [J] + ""; p>
Cela fonctionnera bien. P>
bas + = "|" + tmp [j] ""; code> à
inférieur + = "|" + TMP [J] + ""; code>
Oh, désolé c'est comme je copié. Non, c'est même quand je le répare.