Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
inversioner
0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 8
#1

String, конкатенация и "необъявленные" строки - C++

14.07.2013, 03:03. Просмотров 414. Ответов 5
Метки нет (Все метки)

Доброго времени суток!
Во время написания простого примера (изучаю язык) наткнулся на проблему с конкатенацией строк:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <string.h>
 
using namespace std;
 
int main()
{
    string text = "text";
 
    cout << "text2" + text;
    //ошибка, т.к. оператор + не умеет объединять массив из char и string
 
    cout << strcat("text2", text);
    //тоже ошибка: оператор почему-то оперирует не string, а указателями на char
}
Собственно, почему "необъявленные" строки (типа строки "text2" в коде выше) на самом деле имеют тип массива символьного типа, но не строки (string), а strcat требует аргументы типа вовсе не string, а указателя на char?
И что же делать, если нужно объединить строку и массив из char?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2013, 03:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос String, конкатенация и "необъявленные" строки (C++):

Функция isspace и тип string: Не существует подходящей функции преобразования из "std::string" в "int" - C++
Добрый день! Я только начинаю изучать язык c++ по книге &quot;Язык программирования С++. Базовый курс 5-е изд 2014(Стэнли Б. Липпман)&quot;. ...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Ошибки в выводе типа if (string != "0") printf("%s, ", string) - C++
Имеется класс &quot;почтовый адрес&quot;, поля - string и int. Необходимо сделать так, чтобы при печати выводились только поля с содержимым != 0....

В чём разница между возвратом "string" и "const string&" & - C++
class test { public: test(const string&amp; text) { this-&gt;text = text; } string getText() { return text;

Вывести текст файла, заменив цифры от 0 до 9 на слова "ноль", "один"."девять", начиная каждое предложение с новой строки - C++
Написать программу, которая считывает текст из файла и выводит его на экран, заменив цифры от 0 до 9 на слова &quot;ноль&quot;, &quot;один&quot;...&quot;девять&quot;,...

Ошибка со string: "идентификатор "string" не определен" - C++
Пытаюсь объявить переменную static string stt = &quot;d&quot;; но в студии вылазиет ошибка что идентификатор &quot;string&quot; не определен, что делать? ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
14.07.2013, 03:24 #2
Цитата Сообщение от inversioner Посмотреть сообщение
Собственно, почему "необъявленные" строки (типа строки "text2" в коде выше) на самом деле имеют тип массива символьного типа, но не строки (string), а strcat требует аргументы типа вовсе не string, а указателя на char?
Потому что это С++.

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
// 1
std::string s = std::string("text2") + std::string("text1");
 
// 2
std::stringstream ss;
ss << "text1" << "text2";
std::string s = ss.str();
inversioner
0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 8
14.07.2013, 03:34  [ТС] #3
Цитата Сообщение от 0x10 Посмотреть сообщение
std::string s = std::string("text2") + std::string("text1");
Студия говорит, что оператора +, работающего с операндами такого типа нет.
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
14.07.2013, 03:38 #4
Файл <string> подключен?
inversioner
0 / 0 / 0
Регистрация: 14.07.2013
Сообщений: 8
14.07.2013, 03:52  [ТС] #5
Цитата Сообщение от 0x10 Посмотреть сообщение
Файл <string> подключен?
Подключён был string.h. Сейчас подключил string -- ошибки нет. Спасибо.
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
14.07.2013, 07:46 #6
Цитата Сообщение от inversioner Посмотреть сообщение
cout << "text2" + text;
//ошибка, т.к. оператор + не умеет объединять массив из char и string
Это тоже должно работать. У вас, наверное, из-за неправильного заголовочного файла нескомпилировалось.

http://www.cplusplus.com/reference/s...ing/operator+/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2013, 07:46
Привет! Вот еще темы с ответами:

Error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "std::string" (или приемлемое - C++
эмулятор работы банкомата Например #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;time.h&gt; #include...

Не существует подходящей функции преобразования из "std::string" в "int" - C++
Я только начинаю изучать язык c++ по книге &quot;Язык программирования С++. Базовый курс 5-е изд 2014(Стэнли Б. Липпман)&quot;. Упр.3.17 ...

Реализовать классы "Воин", "Пехотинец", "Винтовка", "Матрос", "Кортик" (наследование) - C++
Разработать программу с использованием наследования классов, реализующую классы: − воин; − пехотинец(винтовка); − матрос(кортик). ...

Найти номер последней по порядку строки в матрице, содержащей наибольшее количество букв "ш", "щ" - C++
Нужен код к этому условию, пожалуйста. Дана символьная матрица размера 13х18. Найти номер последней по порядку строки,содержащей...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.07.2013, 07:46
Ответ Создать тему
Опции темы

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