Как присвоить строке новое значение в C++?
В строке string[]=»zaqzaqzaq»; ошибка, красным выделены квадратные скобки, курсор между ними и ошибка: [Error] expected primary-expression before ‘]’ token Как правильно присвоить строке символов новое значение?
Отслеживать
задан 10 фев 2018 в 14:09
257 1 1 золотой знак 3 3 серебряных знака 15 15 бронзовых знаков
int main() , а не просто main() .
10 фев 2018 в 15:20
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Если вы пишете на C++, то зачем вам char? Используйте готовый объект типа string:
#include using namespace std; main()
Отслеживать
ответ дан 10 фев 2018 в 14:19
Mark Tiukov Mark Tiukov
140 1 1 золотой знак 1 1 серебряный знак 13 13 бронзовых знаков
Очень неудачное имя для переменной вы выбрали.
10 фев 2018 в 14:37
C++ НЕ поддерживает int по-умолчанию
– user227465
10 фев 2018 в 15:00
@GreenDragon: Как впрочем и С его уже давно не поддерживает.
10 фев 2018 в 15:18
@zed , да, пожалуй для начинающих это не очень удачное название переменной. Спасибо за указание! 😉
10 фев 2018 в 16:03
насколько я понел речь шла о инициализации массива, а не как получать строку
char string[] = "qazqazqaz"; char s[] = "zaqzaqzaq"; strcpy(string, s); cout
Отслеживать
ответ дан 10 фев 2018 в 14:39
AR Hovsepyan AR Hovsepyan
15.9k 3 3 золотых знака 14 14 серебряных знаков 30 30 бронзовых знаков
А если новая строка будет длиннее?
10 фев 2018 в 14:47
@zed это уже другой вопрос
10 фев 2018 в 14:55
Поскольку вы рассмотрели лишь крайний случай, когда обе строки имеют одинаковый размер, ваш ответ по сути бесполезен. Вопрос же в том, как динамически присваивать строке другое значение, которое может и не совпадать по длине.
10 фев 2018 в 15:02
@ zed, я читать умею, но не нашел в вопросе даже намека на ваше утверждение. Просто простой ответ на простой вопрос - не вижу надобности обсуждать дальше. Даже неинтересно. То что у вас есть знания по С строкам, я уже понел
10 фев 2018 в 15:10
Самая последняя строка в вопросе: Как правильно присвоить строке символов новое значение? И раз там не сказано, что надо присвоить строку того же самого размера, то стоит воспринимать вопрос в общем.
Как присвоить значение строке в c
Подобно тому, как все математические функции "лежат" в библиотеке math.h, функции для работы со строками объединены в библиотеке string.h
Вопрос: КАК узнать длину строки?
Для того, чтобы точно знать, сколько выделить памяти для хранения строки, часто нам нужно получить длину конкретной строки. Разного рода функции иногда предлагают не просто ввести строку, а указать какое количество символов из неё мы хотели бы использовать. Чаще всего мы хотим ввести всю строку, поэтому есть смысл не считать вручную, а просто измерить длину строки и подставить в функцию.
#include
#include
void main()
char *str = "машина";
>
Функция strlen() возвращает количество символов в строке. Например для строки "машина" она вернёт число 6.
Вопрос: Как сложить две строки?
Помните мы писали программу, которая c нами здоровалась? Там была строка:
И умная программка добавляла в конец ваше имя.
А если мы хотим сложить две строки, которые заранее не известны? Для этого в программировании применяется операция "склеивания" - конкатенции (знаю - жуткое слово!), которая позволяет просто сложить две строки вместе и получить одну. В языке СИ такой операции нет, но зато в библиотеке string.h есть специальная функция strncat(), которая позволяет склеивать исходную строку с подстрокой.
void main()
char kuda[20];
char *otkuda="Федерация";
strcpy(kuda, "Российская "); //копирование в строку kuda
strncat(kuda, otkuda, strlen(otkuda)); //склеиваем две строки, результат - в строке kuda
cout
Функция strcpy(to, from) копирует строку from в строку to. Кстати, это ещё один из способов присвоения строке значения. Функция strncat объединяет две строки, дописывая в конец строки kuda строку otkuda. Этот процесс можно сравнить с локомотивом, в конец которого на товарной станции прицепляют ещё один вагончик. Для каждого нового вагона нам понадобится функция strncat.
Обратите внимание, что у функции strncat три аргумента. Функция гибка и позволяет скопировать не всю строку, а только её часть. Если мы точно знаем сколько символов в строке otkuda, можно третьим аргументом задать число, но проще всего измерить длину строки с помощью известной нам уже функции strlen().
Вопрос: КАК из строки сделать число?
Для чего это нужно? Часто программа получает данные от пользователя в виде строки. Например, данные полученные из текстовых полей Windows - всегда строковые. И даже если пользователь ввёл число, оно всё равно будет представлено, как строка. Чтобы подставить это число в форумулу, вам придётся его конвертировать в строку.
void main()
int n;
char *str="123456"; //объявляем строку
n=atoi(str); //конвертируем в число
В некоторых классах Windows есть методы, позволяющие сразу получать целые числа из текстовых полей, но метода, позволяющего сразу считывать числа с плавающей запятой, нет, поэтому в любом случае вам понадобится конвертирование. Для преобразования строки в число с плавающей запятой существует функция atof(char *str), которая по своему применению аналогична.
В этом примере мы используем новую для нас библиотеку "stdlib.h" - в данной библиотеке содержится большинство функций конвертирования, а также множество других функций самого разного назначения. Это библиотека очень широкого профиля.
После получения строки из поля ввода, конвертирования в число, подстановки в формулу, или куда-то ещё, ответ зачастую придётся выводить в какое-нибудь окно. Естественно, напрямую число в окно мы не сможем - оно нас просто не поймёт, и заставит выполнять обратное преобразование - теперь уже из числа в строку.
Иногда ответ должен сопровождаться каким-то текстом, например: "U = 127,24 v ". Для создания такого дружественного интерфейса удобнее использовать не саму операцию конвертирования, а записать в один буфер и число и текст.
Функция sprintf аналогична функции printf, с той лишь разницей, что вывод информации осуществляется не в какое-то устройство вывода, а в буфер данных. Используя эту функцию, мы сможем комбинировать различные типы данных в любой последовательности.
void main()
char buffer[25]; //строка, длиной 25 символов
const double f=127.24; //число с плавающей точкой
sprintf(buffer, "U = %3.2f V\n", f);
Однако, если нам необходимо просто преобразовать число в строку, можно использовать функцию конвертирования, описанную в следующем разделе.
Вопрос: КАК из числа сделать строку?
#include
void main()
<
int number = 123456;
char *string;
itoa(number, string, 10); //число 10 заботится о добавлении минуса отрицательными числам
printf("Число = %d Строка = %s", number, string);
>
Конвертирование - очень важная задача, и в математических программах без неё никуда. Если ваша программа что-то считает, получая данные от пользователя, вы будете использовать конвертирование постоянно.
Вопрос: КАК что-то найти в строке?
Иногда нам нужно проверить строку на наличие в ней какого-нибудь символа. Например, если пользователь вводит свой E-mail хорошо бы проверить, есть ли в нём символ "at", который в России чаще называют собакой @? Кроме того, в каждом адресе электронной почты есть по крайней мере одна точка.
Следующая программа последовательно проверяет наличие в строке знака "@" и точки.
void main()
char *ptr;
printf("Введите E-mail: ");
scanf("%s", email);
ptr = (char *)memchr(email, '@', strlen(email));
ptr = (char *)memchr(email, '.', strlen(email));
printf("\n%s не является E-mail адресом", email);
>
else printf("\nE-mail адрес: %s успешно введён!", email);
Переменная flag - своеобразный выключатель, который имеет два состояния "истина" и "ложь". Такие переменные программисты часто так и называют "флагами" или "флажками". Они обозначают состояние. Первоначально переменная flag = 0. Но если программа не обнаруживает в строке знака "@" или точки, значение flag поменяется на 1. Условий может быть и больше (например, мы могли бы проверить, есть ли какие-то символы до знака "@" и находится ли точка после знака @, а не до него), однако работать они будут по тому же принципу.
В конце программы проверяется значение переменной flag, и если она изменила своё значение, E-mail адрес признаётся некорректным.
При разработки больших программ подобные проверки необходимо производить буквально на каждом шагу, они делают программу более надёжной и отказоустойчивой, страхуя нас от недопустимого типа данных. Согласитесь, если мы попытаемся отправить письмо на некорректный адрес, приятного в этом будет мало! Однако во избежание увеличения кода, мы заключим процедуру проверки адреса в маленькую проверочную функцию вида:
int IsEmail(char *email)
которая будет возвращать 0, если E-mail адрес был введён недостаточно корректно.
Часто производители программного обеспечения требуют регистрации и предлагают пользователю заполнить форму, в которой в том числе есть просьба указать электронный адрес. Знать ваш E-mail адрес производителю жизненно важно, чтобы впоследствии заваливать вас своей рекламой. Поэтому если вы введёте свой адрес неправильно или вообще проигнорируете эту просьбу, электронная форма откажется вас регистрировать.
Функция поиска в строке незаменима при работе с файлами (а храним мы данные именно в них - лучшего пока ничего не придумали). Есть и другие применения поиска: когда программа предлагает пользователю сохранить файл, с которым он работал, необходимо ввести его имя. Однако пользователи попадаются с совершенно разным профессиональным уровнем: кто-то вводит имена файлов с расширениями: "picture.bmp" , а кто-то и не знает, что такое расширение. Нужно предусмотреть оба случая, и в случае, если пользователь просто ввёл имя: "моя картинка. " добавить к этому имени расширение. Пример решения этой проблемы приведён ниже.
#include
#include
#include
void main()
char *ptr;
printf("Введите имя файла: ");
scanf("%s", filename);
ptr = (char *)memchr(filename, '.w', strlen(filename));
strncat(filename, ".bmp", 4);
>
printf("\nИмя файла: %s", filename);
Вопрос: КАК сравнить две строки?
Часто, когда вы получаете от пользователя не числовые данные, а строковые, вам надо сравнить строку с уже имеющимся эталоном. Допустим, вы хотите, чтобы пользователь зарегистрировал свою версию вашей программы и ввёл пароль. Для этого и нужна функция сравнения строк strncmp(). Она возвращает ноль, если строки одинаковы.
Следующая ниже программа вполе функциональна. Она ни за что не пропустит построннего на ваш компьютер. При желании, вы можете включить её в файл autoexec.bat. Доступ посторонним будет закрыт навеки! (Конечно если вы всё ещё пользуетесь Windows 98).
char *password="BUSH"; //наш пароль
char enter[256]; //строка, которую будет вводить пользователь
do printf("Введите пароль: ");
scanf("%s", enter);
//сравниваем две строки по всей длине
ptr = strncmp(enter, password, strlen(password));
//если строки одинаковы
if (ptr == 0)
printf("Доступ открыт");
return(0);
>
else printf("Введён неверный пароль!");
>
>while(ptr!=0); //цикл повторяется, пока ptr не будет =0.
return 0;
>
Конечно в реальности никто не будет прописывать пароль в коде программы, иначе мало-мальски грамотный хаккер запросто его оттуда "достанет". Настоящие программы генерируют пароль из имени пользователя, таким образом, чтобы пароли никогда не повторялись. Также популярна онлайн регистрация, при которой пользователь получает пароль, регистрируясь на сайте фирмы. Получив такой пароль, программа преобразует его по сложному алгоритму и проверяет на соответствие какому-то правилу - например сумма кодов символов должна всегда быть равна 100 (или что-то в этом роде). Дружеский совет - никогда не давайте "говорящие" пароли, как в данном примере. Такие пароли разгадываются элементарно, путём простого перебора символов. Хороший пароль должен содержать цифры и буквенные символы разного регистра, также неплохо было бы включить в него специальные символы. В результате должно получиться нечто вроде: "$&weh!60Om17rv".
Подытожим. Мы освоили достаточно операций для работы со строками. Их хватит на первый и на второй случай. Если же вам понадобится что-то большее, читайте описания функций библиотеки string.h. В справочной системе.
Как присвоить значение строке в c
Как мне вручную присвоить значение этой строке?
Сообщение отредактировано: Vex - 01.06.04, 14:11
Сообщ. #2 , 01.06.04, 14:15
Рейтинг (т): 81
struct mystruct<
mystruct struct1[5];
struct1[0].a=5;
strcpy(struct1[0].b,"test"); // так надо
Сообщ. #3 , 01.06.04, 14:17
Unregistered
"string" имеет тип const char*. Поэтому и не компилиться.
Сообщ. #4 , 01.06.04, 15:17
Рейтинг (т): 7
Ну в принципе если ты хочешь, чтоб именно присваивать значение строке, то можно перегрузить оператор "=". Но по моему проще функцией писать. всё - равно придётся писать фукцию и посимвольно загонять строку.
Сообщ. #5 , 01.06.04, 18:21
Рейтинг (т): 172
Vex, 1.06.04, 18:09
Как мне вручную присвоить значение этой строке?
использовать std::string и не париться.
dimedrol, 1.06.04, 18:17
"string" имеет тип const char*. Поэтому и не компилиться.
какая разница - компилится/не компилится? а если бы это компилилось, ты бы так со строками и работал? 🙂 идея работы со строками в корне неправильная..
Сообщ. #6 , 01.06.04, 18:49
Axis, 1.06.04, 16:15
#include
struct mystruct int a;
char b[10];
>;
struct1[0].a=5;
strcpy(struct1[0].b,"test"); // так надо
Уже пробовал, результат тот же
Сообщ. #7 , 01.06.04, 18:52
Рейтинг (т): 172
Vex, 1.06.04, 22:49
Уже пробовал, результат тот же
Скомпилируй и проверь:
struct mystruct<
int main(int argc, char** argv) <
mystruct struct1[5];
struct1[0].a=5;
strcpy(struct1[0].b,"test"); // так надо
cout << struct1[0].b;
Другое дело, что может ошибка возникает из-за того, что 10 байт просто недостаточно для хранения твоей строки и ты просто залезаешь не туда.
Сообщ. #8 , 01.06.04, 19:42
Unregistered
Цитата byte,1.06.04, 16:21
dimedrol, 1.06.04, 18:17
"string" имеет тип const char*. Поэтому и не компилиться.
какая разница - компилится/не компилится? а если бы это компилилось, ты бы так со строками и работал? 🙂 идея работы со строками в корне неправильная..
Ну если говорить про идею, то я бы отдался std::string
Сообщ. #9 , 01.06.04, 22:39
Другое дело, что может ошибка возникает из-за того, что 10 байт просто недостаточно для хранения твоей строки и ты просто залезаешь не туда.
Ага, все понятно, спасибо. Тему можно считать закрытой.
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- C/C++: Общие вопросы
- Следующая тема
- Форум на Исходниках.RU
- Программирование
- C/C++
- C/C++: Общие вопросы
Присвоить значение строке


Присвоить значение colorDialog строке
Добрый день. Может поможете новичку, честно - тока тока знакомлюсь c C#. Изобретаю редактор CSS.

Присвоить значение строке многомерного массива
Есть двумерный массив типа double. Написана функция, разбирающая строку (string) на отдельные.

Присвоить строке значение другой строки
Добрый день. У меня есть строки FILE_OVL_1 DB 'ABCD',0 FILE_OVL_2 DB .
Datagridview, присвоить одной строке значение другой
как можно присвоить одной строке значение другой? dataGridView1.Rows = dataGridView1.Rows;.