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

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 16.05.2013, 15:54   #1
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию Имя файла

Добрый день. Задача такая: запросить у пользователя путь к файлу и вывести на экран непосредственно название самого файла. Т.е. пользователь вводит E:\video\100_Greatest_Discoveries\0 9_fizika.avi, а на экран надо вывести 09_fizika.avi
У меня получилось что то странное. Выводится не сам файл, а еще и некоторые символы до последнего слеша (причем всегда по разному). Помогите, пожалуйста, разобраться.

Код:
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
	char folder[128];
	int len = 0, counter = 0;
	bool isSlash = 1;
	cout << "Enter a path: ";
	cin >> setw(128) >> folder;
	len = strlen(folder);
	while(isSlash)
	{
		if(folder[len] == '\\')
		{
			isSlash = 0;
		}
		len--;
		counter++;
	}
	cout << (folder + counter-1) << endl;
	system("pause");
	return 0;
}
Dima-War вне форума Ответить с цитированием
Старый 16.05.2013, 15:58   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Один вопрос: что у Вас оказывается в переменной counter на выходе из цикла, по-Вашему?
Abstraction вне форума Ответить с цитированием
Старый 16.05.2013, 16:17   #3
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Хмм... По идее там должно оказаться количество символов до слеша.
С конца, естественно.
Dima-War вне форума Ответить с цитированием
Старый 16.05.2013, 16:27   #4
pproger
C++ hater
СуперМодератор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2Dima-War
Код:
#include <iostream>

using namespace std;

int main()
{
	string str;

	cin >> str;

	string::size_type pos = str.rfind('/');

	if (pos != string::npos) {
		cout << str.substr(pos + 1);
	} else {
		cout << "symbol '/' not found." << endl;
	}

	return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 16.05.2013, 18:26   #5
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Спасибо, конечно. Но хотелось бы полегче. Видимо в моем коде ошибка, хотелось бы понять где именно.
Dima-War вне форума Ответить с цитированием
Старый 16.05.2013, 18:52   #6
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Код:
#include <iostream>

int main()
{ 
using namespace std;

char pFileName[128];
int len, cycleLen, pos;
bool IsSlash;
cout << "Enter filename: ";
gets(pFileName);
len = strlen(pFileName);
cycleLen = len;

IsSlash = false;
while (!IsSlash && cycleLen != 1)
{
	if (pFileName[ cycleLen ] == '\\') 
	{
		IsSlash = true;
		pos = cycleLen;
	}
	else 
	{
	cycleLen--;
	}
}
if (IsSlash)
{
pos++; //moving to the symbol after the slash symbol

//outputing information
cout << "Filename:: ";
while (pos != len)
{
	cout << pFileName[pos];
	pos++;
}
cout << endl;
}
else
	cout << "No filename found" << endl;
system("pause");
return 0;
}
Я использовал тот же алгоритм что и Вы.
Конечно, можно добавить еще несколько предусловий (e.g - правильность входных данных)

Последний раз редактировалось Igor95; 16.05.2013 в 18:57.
Igor95 вне форума Ответить с цитированием
Старый 16.05.2013, 20:55   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Хмм... По идее там должно оказаться количество символов до слеша.
С конца, естественно.
Та-ак. А какой смысл этой строки кода?..
Код:
	cout << (folder + counter-1) << endl;
Abstraction вне форума Ответить с цитированием
Старый 16.05.2013, 22:05   #8
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Та-ак. А какой смысл этой строки кода?..
Код:
	cout << (folder + counter-1) << endl;
-1 забыл удалить, рассчитывал без этого. Это получается как бы указатель, смещенный относительно начала массива на counter байт. Так рассказывали на курсах.

Последний раз редактировалось Dima-War; 16.05.2013 в 22:31.
Dima-War вне форума Ответить с цитированием
Старый 16.05.2013, 22:34   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Хмм... По идее там должно оказаться количество символов до слеша.
С конца, естественно.
Цитата:
Это получается как бы указатель, смещенный относительно начала массива на counter байт.
Ещё вопросы будут?
Abstraction вне форума Ответить с цитированием
Старый 16.05.2013, 22:35   #10
Dima-War
Форумчанин
 
Регистрация: 17.03.2012
Сообщений: 105
По умолчанию

Я тут такую особенность подметил. Я запрашиваю строку и вывожу переменную len на экран (ввожу тест, получаю длину равную 4). Дальше вывожу len в конце программы и она уже равна -608. Не понимаю почему. Ведь с каждым шагом цикла переменная len всего лишь уменьшается на единицу. А на выходе непонятно что.
Dima-War вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Имя файла SashaS Microsoft Office Excel 4 16.03.2012 17:32
Имя файла glebast Помощь студентам 4 11.02.2012 22:59
Получить имя файла из ссылки(в конце ссылки нет имени файла) Человек_Борща Работа с сетью в Delphi 11 05.06.2011 14:15
Имя файла Ra88 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 08.07.2010 07:48
имя файла ? somwan Общие вопросы C/C++ 1 18.03.2009 17:46


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS