Приведение типов и многое другое

Рейтинг: 0Ответов: 2Опубликовано: 21.11.2014

Всем привет. Помогите с кодом пожалуйста. Мне нужно сделать из int string. Я уже все способы перепробовал, везде пишет, что не найден оператор и т.п. Я новичок, поэтому туплю. Вроде бы stringstream сработал, но при компиляции вылезает ошибка bad alloc, это связано с переполнением памяти. Вот код: pastebin.com/kZC44q5g

Спасибо

Ответы

▲ 1

@newfag, выложите код хотя бы на pastebin.com или ideone.com. Чтобы дать точный ответ, было бы неплохо ваш код запустить и пройтись по нему отладчиком, но набирать вручную лень. Навскидку наиболее вероятная причина падения - вы длину строки определяете посредством sizeof. Это и с массивом char'ов не работает, не то что с классом string. Для определения дины строки, хранящейся в объекте класса string, используйте метод size(): lng = str.size();.

UPD

Вот ещё пара косяков:

  1. При чтении из потока нескольких переменных нужно отделять их операторами >>, а не запятыми, как у вас: myfileinput>>x,n;.
  2. Вы используете неинициализированные переменные n2, temp. Переменные нужно инициализировать перед использованием. Компилятор имеет право записать в неинициализированные переменные любой мусор.
  3. Было бы неплохо, если бы вы объяснили, чего хотите добиться вашим кодом. В данный момент особого смысла я в нём не вижу. В частности, ошибка bad alloc у вас возникает из-за того, что вы бесконечно дописываете в ss какие-то строки. stringstream не очищается перед каждой записью, поэтому разростается до бесконечности и забивает собой всю память.
▲ 1

Поскольку до -std=c++11 стандартной функции to_string() не было, то видимо более надежно писать код:

 #include <stdio.h>  // для sprintf
 ...
 char tmpbuf[21];    // максимальный размер long long целого со знаком и завершающим nil
 sprintf (buf, "%d", i);  // в данном случае i -- int (достаточно было бы буфера размером 12)
 string str(tmpbuf);