Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 09.11.2018, 10:26   #1
KAMLS
Участник клуба
 
Регистрация: 09.04.2017
Сообщений: 534
Репутация: 10
По умолчанию Непонятки с видом инициализации строки.

Здравствуйте!
Не правильно работала одна программа и по-разному тестировал проблему, пока не вышел на её причину. Прошу знающих объяснить в чем дело.
Вот первый вид тестовой программы:
Код:

#include <iostream>
#include<string>
#include<Windows.h>
#include<conio.h>

using namespace std;

int main()
{
	setlocale(LC_CTYPE, "rus");
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	string str1="Провокация", str2 = "", str3 = "";
	cout << "Введите строку.\n";
	str2 = "Проверка";
	str3 = str2.substr((str2.length() - 1), 1);
	cout << str3 << endl;
	cout << "Вывод str2.substr((str2.length() - 1, 1)" << str2.substr((str2.length()-1), 1)<<endl;
	if ((str1[9] == 'я' && str3 == str2.substr((str2.length() - 1), 1)))
	cout << str2;
	_getch();
	return 0;
}

Если str3 инициализируется без знаков, просто кавычками "", то программа, а самое главное - условие, работают нормально.
Цель - именно проверка работы условия.

Если str3 сразу инициализировать значением "a" и закомментить строку инициализацией выражением
Код:

str3 = str2.substr((str2.length() - 1), 1);

то условие не работает.
Вот вид программы с неработающим условием
Код:

#include <iostream>
#include<string>
#include<Windows.h>
#include<conio.h>

using namespace std;

int main()
{
	setlocale(LC_CTYPE, "rus");
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	string str1="Провокация", str2 = "", str3 = "a";
	cout << "Введите строку.\n";
	str2 = "Проверка";
	//str3 = str2.substr((str2.length() - 1), 1);
	cout << str3 << endl;
	cout << "Вывод str2.substr((str2.length() - 1, 1)" << str2.substr((str2.length()-1), 1)<<endl;
	if ((str1[9] == 'я' && str3 == str2.substr((str2.length() - 1), 1)))
	cout << str2;
	_getch();
	return 0;
}

На скринах видно результат
Изображения
Тип файла: jpg кадр_10.jpg (68.3 Кб, 0 просмотров)
Тип файла: jpg кадр_11.jpg (68.4 Кб, 0 просмотров)
KAMLS вне форума   Ответить с цитированием
Старый 09.11.2018, 11:49   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,455
Репутация: 2073

icq: 216409213
По умолчанию

У вас исходник в какой кодировке?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 09.11.2018, 12:35   #3
KAMLS
Участник клуба
 
Регистрация: 09.04.2017
Сообщений: 534
Репутация: 10
По умолчанию

Спасибо. Действительно раскладка видать не та была при инициализации str3 символом "а".
Сейчас исправил и работает условие. Но в той программе с которой всё началось, которую я вам показывал в лс, там всё равно идентичное условие не работает. Там я конечно же проверил кодировку чтобы совпадала с условием и предустановленными значениями. Не работает.
KAMLS вне форума   Ответить с цитированием
Старый 09.11.2018, 12:37   #4
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,455
Репутация: 2073

icq: 216409213
По умолчанию

Я вечером или на выходных ее гляну. Но, мне кажется, там алгоритм проще можно организовать.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 09.11.2018, 12:47   #5
KAMLS
Участник клуба
 
Регистрация: 09.04.2017
Сообщений: 534
Репутация: 10
По умолчанию

Спасибо. Я сейчас в основной программе дописал
Код:

str4 = str2.substr(((str2.length() - 1), 1));
			cout << str4;

после условия чтобы в отладке был виден результат выражения и код символа, чтобы сравнить с идущим кодом символа.
В общем буду выявлять.))
KAMLS вне форума   Ответить с цитированием
Старый 09.11.2018, 12:58   #6
KAMLS
Участник клуба
 
Регистрация: 09.04.2017
Сообщений: 534
Репутация: 10
По умолчанию

Сделал. Там была пара лишних скобок, и выражение
substr((((str2.length() - 1), 1))) считалось как substr с одним аргументом. т.е. не один символ а несколько. Вот условие и не срабатывало.
str4 в отладчике значение показало))
KAMLS вне форума   Ответить с цитированием
Старый 09.11.2018, 13:05   #7
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,455
Репутация: 2073

icq: 216409213
По умолчанию

Так я ж вам сразу сказал - смотрите, что показывает студия после той строки, какие сравнения выполняла и что они вернули.
А со скобками у вас беда... Вот, например, в данном коде зачем вам в ифе две скобки, если вы подусловия не выделяете? Зачем str2.length() - 1 в параметрах отдельные скобки?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 09.11.2018, 19:53   #8
KAMLS
Участник клуба
 
Регистрация: 09.04.2017
Сообщений: 534
Репутация: 10
По умолчанию

Дык.. Учусь же)))

Последний раз редактировалось KAMLS; 09.11.2018 в 19:56.
KAMLS вне форума   Ответить с цитированием
Старый 09.11.2018, 19:56   #9
KAMLS
Участник клуба
 
Регистрация: 09.04.2017
Сообщений: 534
Репутация: 10
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Так я ж вам сразу сказал - смотрите, что показывает студия после той строки, какие сравнения выполняла и что они вернули.
При выполнении не показывали. субстр выполняясь нигде не отображался. Пока я новую строку не соорудил и не стал в неё забивать текущее выполнение стр2. Там то я сразу и увидел что забивается не то и сразу нашел причину - лишние скобки. Сейчас то уже внимательнее буду.
KAMLS вне форума   Ответить с цитированием
Старый 09.11.2018, 21:36   #10
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,455
Репутация: 2073

icq: 216409213
По умолчанию

Цитата:
Сообщение от KAMLS Посмотреть сообщение
субстр выполняясь нигде не отображался
У вас какая-то другая студия. В дебаге в автосах все пишется...
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка инициализации D6ist Общие вопросы Delphi 0 25.03.2018 18:16
Ежегодно в город поставляется одним видом транспорта P т картофеля из колхозов «Тарново», «Макаровцы», «Прогресс» соответственно по цене за одну тонну С1 руб., С2 руб. и С3 руб. igormel Паскаль 1 05.05.2017 15:51
БД "Прогноз погоды". Вычислить количество дней с заданным видом осадков и посчитать сколько % данный вид осадков от общего числа sasha_14-88 БД в Delphi 2 21.11.2014 14:37
проблема инициализации opengl nikita1234 Помощь студентам 3 18.07.2014 22:32
Преобразование для инициализации MyLifeStyle Общие вопросы C/C++ 2 15.05.2014 20:22


07:43.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru