Я работаю над проектом для класса структур данных. Цель состоит в том, чтобы использовать дерево, чтобы выяснить, могут ли метафорические карлики платить метафорические налоги метафорическими алмазами. Входные данные даны в виде строки в формате «3 1 2 3 3 1 2 3», что подразумевает 3 бриллианта стоимостью 1 2 3 и 3 налога стоимостью 1 2 3.
Проблема, с которой я столкнулся, связана не с реализацией дерева, а с обработкой ввода таким образом, чтобы я мог вставить его в дерево и, в частности: когда я вводю значения в код непосредственно при тестировании дает правильный вывод, но при использовании cin вывод сталкивается с несколькими проблемами.
Со следующим кодом:
string str;
str = "5 1 2 3 4 5 5 1 2 3 4 5";
str.erase(remove_if(str.begin(), str.end(), ::isspace), str.end());
char ch[str.size()];
strcpy(ch, str.c_str());
int numDiamonds = ch[0] - '0';
cout<<numDiamonds<<" diamonds"<<endl;
int counter = 1;
for(int i = 1; i < numDiamonds+1; ++i){
int out = ch[i] - '0';
cout<<out;
cout<<" ";
++counter;
}
cout<<endl;
int numTaxes = ch[numDiamonds+1] - '0';
cout<<numTaxes<<" taxes"<<endl;
for(int i = counter+1; i < str.size(); ++i){
int out = ch[i] - '0';
cout<<out;
cout<<" ";
}
cout<<endl;
}
мой вывод выглядит правильно и выглядит следующим образом:
5 diamonds
1 2 3 4 5
5 taxes
1 2 3 4 5
но когда я меняю "str = 5 1 ..." на "cin >> str", мой вывод выглядит беспорядочным и выглядит следующим образом.
5 diamonds
-48 -48 -48 -48 -48
-20 taxes
1 diamonds
-48
-48 taxes
2 diamonds
-48 -48
-48 taxes
3 diamonds
-48 -48 -48
-48 taxes
4 diamonds
-48 -48 -48 -48
-48 taxes
5 diamonds
-48 -48 -48 -48 -48
-20 taxes
5 diamonds
-48 -48 -48 -48 -48
-20 taxes
1 diamonds
-48
-48 taxes
2 diamonds
-48 -48
-48 taxes
3 diamonds
-48 -48 -48
-48 taxes
4 diamonds
-48 -48 -48 -48
-48 taxes
5 diamonds
-48 -48 -48 -48 -48
-20 taxes
Никакое гугление не помогло решить мою проблему, поэтому я обращаю вас, ребята. Есть ли объяснение, почему cin в строку имеет другое поведение, чем определение строки в коде?
Спасибо!