Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

Здравствуйте!
Не правильно работала одна программа и по-разному тестировал проблему, пока не вышел на её причину. Прошу знающих объяснить в чем дело.
Вот первый вид тестовой программы:
Код:
#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 Кб, 152 просмотров)
Тип файла: jpg кадр_11.jpg (68.4 Кб, 141 просмотров)
KAMLS вне форума Ответить с цитированием
Старый 09.11.2018, 10:49   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

У вас исходник в какой кодировке?
p51x вне форума Ответить с цитированием
Старый 09.11.2018, 11:35   #3
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

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

Я вечером или на выходных ее гляну. Но, мне кажется, там алгоритм проще можно организовать.
p51x вне форума Ответить с цитированием
Старый 09.11.2018, 11:47   #5
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Спасибо. Я сейчас в основной программе дописал
Код:
str4 = str2.substr(((str2.length() - 1), 1));
			cout << str4;
после условия чтобы в отладке был виден результат выражения и код символа, чтобы сравнить с идущим кодом символа.
В общем буду выявлять.))
KAMLS вне форума Ответить с цитированием
Старый 09.11.2018, 11:58   #6
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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