Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 71, средняя оценка - 4.70
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
#1

сложить char* c char - C++

12.01.2012, 16:21. Просмотров 10299. Ответов 35
Метки нет (Все метки)

подскажите пожалуйста как сложить строку типа char* с символом типа char (например 12 сложить с 3 чтобы получилось 123)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2012, 16:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос сложить char* c char (C++):

Как сложить два char? - C++
Как сложить два char?

Сложить столбиком два числа char - C++
как сложить столбиком 2 числа записанных в char? Объясните кодом

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& - C++
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned short); ...

Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь( - C++
Всем доброго дня! У меня такая проблемка.... написал программу, но сначала она ругалась на Cannot convert char* to char теперь вроде...

Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' - C++
error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *' void crpost(const statep &amp;struc1) { ...

Ошибка: call of overloaded 'strchr(char&, char)' is ambiguous - C++
Здравствуйте, прога почему-то ругается на функцию strchr, вот кусок кода: #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include...

35
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.01.2012, 17:42 #16
А вы не хотите использовать std::string? Там всё куда красивее.
0
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 17:52  [ТС] #17
ну в задании нужно char использовать и смысл как раз в работе с памятью, то есть динамически выделять и изменять, по идее я создаю массив строк, и потом увеличиваю или уменьшаю его, а разве при присваивании ch=chislo[i] я не копирую данные из памяти?
или надо было писать ch=new char(len);? и потом присвоение

Добавлено через 4 минуты
go, это я учел, у меня код этот разделен на 2 функции, где для выделения памяти i+1 передается
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.01.2012, 17:53 #18
1rop, нет, конечно. Да и если бы даже копировали - то куда? ch - всего лишь указатель, памяти он занимает ровно столько, сколько надо для хранения одного адреса. Поэтому если бы данные копировались, программа падала бы из-за этой строки, причём по той же причине (попытка работы с памятью, недоступной программе). Чтобы скопировать одну строку в другую, нужно использовать функцию strcpy, причём строка-хранилище должна быть способна вместить строку-источник плюс один символ.
1
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 18:08  [ТС] #19
вот я исправил, но все равно такая же ошибка, к тому же эта строка раньше выделения и удаления памяти
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//i=0;
//s1='1';
chislo=new char*[i+1];
chislo[i+1]=new char(0);
int len=strlen(chislo[i]);
char* ch;
ch=new char(len+1);
strcpy(ch,chislo[i]);
delete[] chislo[i];
chislo[i]=new char(len+2);
strcpy(chislo[i],ch);
chislo[i][len]=s1;
chislo[i][len+1]='\0';
память для ch выделяется но ошибка на определении длины строки
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.01.2012, 18:11 #20
1rop, залейте-ка код полностью.
0
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 18:15  [ТС] #21
http://webfile.ru/5766492
но похоже тут ошибка
C++
1
2
chislo=new char*[i+1];
chislo[i+1]=new char(0);
надо не i+1 наверно а i
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.01.2012, 18:17 #22
1rop, код сюда, текстом.
0
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 18:21  [ТС] #23
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//это функции
    void sozd(int i){
        chislo=new char*[i];
        chislo[i]=new char(0);
        colv=i;
    }
    void add(char s1, int i){
        int len=strlen(chislo[i]);
        char* ch;
        ch=new char(len+1);
        strcpy(ch,chislo[i]);
        delete[] chislo[i];
        chislo[i]=new char(len+2);
        strcpy(chislo[i],ch);
        chislo[i][len]=s1;
        chislo[i][len+1]='\0';
    }
    void addclick(int i, char s1, Calc& myCalc){
        if(i==-1){
            i++;
            myCalc.sozd(i);
            myCalc.add(s1,i);
        }
        else myCalc.add(s1,i);
    }
//это обработчик
QString s="";
int i=-1;
void MainWindow::on_pushButton_7_clicked()
{
    s=s+"1";
    ui->lineEdit->setText(s);
    char s1='1';
    myOp.addclick(i,s1,myCalc);
}
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.01.2012, 18:25 #24
1rop, new char(n) отличается от new char[n] тем, что первый вариант выделяет память под один символ и инициализирует его значением n, а второй выделяет память под строку из n символов.
1
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 18:57  [ТС] #25
ох, фейл, буду знать)

Добавлено через 27 минут
а такой вопрос, когда я копирую из chislo в ch:
C++
1
2
3
4
int len=strlen(chislo[i]);
        char* ch;
        ch=new char[len+1];
        strcpy(ch,chislo[i]);
то обязательно на 1 больше символ делать? ведь они одинаковой длины должны быть, там в конце получается два конца строки что ли?
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.01.2012, 19:27 #26
1rop, strlen возвращает длину строки без учёта нуль-терминатора, поэтому о нём необходимо позаботиться дополнительно.
0
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 20:15  [ТС] #27
а, а при создании строки(new char[len]) ноль входит получается, и занимает len-1 место??
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
12.01.2012, 20:18 #28
1rop, нет, при выделении памяти таким образом строка изначально содержит мусор.
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.01.2012, 20:20 #29
1rop, да, нужно выделать len + 1
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <cstring>
 
int main ()
{
   char  s[] = "Hello";
   std::cout << sizeof (s) << " " << strlen (s) << std::endl;
}
http://liveworkspace.org/code/1d885711ebc99965906f7321599cb2ae

Добавлено через 40 секунд

Не по теме:

Цитата Сообщение от silent_1991 Посмотреть сообщение
при выделении памяти
Похоже я ни так вопрос понял

1
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 23:58  [ТС] #30
жесть ваще, ни в какую не хочет добавлять, запоминает только последний символ, не могли бы расписать функцию для добавления символа из char s1 в строку номера i, массива строк char** chislo?? если считать что строка i уже создана с длиной 0
C++
1
2
chislo=new char*[i];
chislo[i]=new char[0];
буду оч признателен, а то весь день с этим, вроде несложно но не понимаю что не так, я это с QString сделал за 2 минуты, но char это char...
входные данные s1 и i соответственно
0
12.01.2012, 23:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2012, 23:58
Привет! Вот еще темы с ответами:

Ошибка: initializing argument 2 of `char* fgets(char*, int, FILE*) - C++
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа Помогите...

array char* to char* (значения массива указателей в один указатель) - C++
Как сложить(или вывести в формате char*) все значения массива указателей(char *) воедино, то есть сложить строки и назначить результату...

Различное поведение функции которая копирует строки с char* t и char t[] - C++
столкнулся с ситуацией которую не могу объяснить пишем функцию которая копирует одну строку в другую: void strstr(char* t,...

Сделать преобразование unsigned char в char, а затем типу int - C++
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char - для копеек. Собственно что мне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru