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

231
15 декабря 2016, 16:15

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

Спасибо

Answer 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 не очищается перед каждой записью, поэтому разростается до бесконечности и забивает собой всю память.
Answer 2

Поскольку до -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);
Answer 3

"Мне нужно сделать из int string." -- str = to_string(i). Чтобы попробовать на своей машине, загрузи код по ссылке и выполни команду: g++ -std=c++11 ideone_XMjben.cpp && ./a.out. Если слова "выполни команду", или сама команда не ясна -- задай отдельный вопрос.

Answer 4

Я вот такой способ придумал.

#include <iostream>
#include <string>
using namespace std;
int main(){
    char buf[40];
    int i = 123;
    itoa(i, buf, 10);
    string s;
    s += buf;
    cout << s << endl;
    return 0;
}
READ ALSO
Строка, числа и скобки

Строка, числа и скобки

![alt text][1]На вход подается что-то типа: (12 32(32 12))Мне считать скобки перед числом, увидев число, выполнить: res=a[i]*(0

211
Как обратиться к элементу вектора в ассемблерной вставке?

Как обратиться к элементу вектора в ассемблерной вставке?

Как обратиться к элементу вектора в ассемблерной вставке c++ (vs2012)?

225
Run-Time Check Failure #3 - The variable &#39;x&#39; is being used without being initialized

Run-Time Check Failure #3 - The variable 'x' is being used without being initialized

Пишу программуКод, та часть на которой ломается:

237
Считывание строки из файла и дальнейшая работа со следующей по счету строкой

Считывание строки из файла и дальнейшая работа со следующей по счету строкой

Название, может, криво написал, лучше опишу задание

185