С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.97
KostyaKulakov
Заблокирован
#1

Из полного пути к файлу выделить только имя файла - C++

06.09.2012, 13:24. Просмотров 5594. Ответов 18
Метки нет (Все метки)

Написать программу, которая по введённому полному пути к файлу выделяла бы
только имя файла (то, что следует после последнего слеша или обратного слеша).
Например, ввод:
E:\video\100_Greatest_Discoveries\09_fizika.avi
вывод:
09_fizika.avi
Использовать класс std::string

можно ли реализовать болие ли мение просто? чтобы было понятно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2012, 13:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Из полного пути к файлу выделить только имя файла (C++):

Выделить из строки с полным путем к файлу само имя файла без расширения - C++
String58. Дана строка, содержащая полное имя файла, то есть имя диска, спи-сок каталогов (путь), собственно имя и расширение. Выделить из...

Процедура разбора полного пути к файлу, представленного строкой - C++
Разработать процедуру (и вспомогательную программу) разбора заданной текстовой строки (задается переменной окружения или параметром...

Расщепление полного пути к файлу на диск, директорий...(неясность в задании) - C++
Доброго времени суток! Не ожидал от препода излишней адекватности,но сейчас я в ступоре... вот текст задания: " Написать функцию...

#include ,указание файла без полного пути. - C++
По сабжу,есть 2010 студия,есть чужой код.Решил сесть,разобраться,и натолкнулся на такой вариант #includeа . #include <mem/raw.h> У меня...

Выделить из полного имени файла название последнего каталога - C++
Дана строка, содержащая полное имя файла. Выделить из этой строки название последнего каталога (без символов «\»). Если файл содержится в...

Выделить из строки имя файла без расширения - C++
Дана строка, содержащая полное имя файла, то есть имя диска, список ката- логов (путь), собственно имя и расширение. Выделить из этой...

18
co6ak
Кошковед
409 / 502 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
06.09.2012, 13:32 #2
первое, что приходит в голову:
C++
1
2
3
4
5
6
std::string data = 'E:\video\100_Greatest_Discoveries\09_fizika.avi'
std::string fileName = '';
int i = data.length() - 1;
while (data[i--] != '\\' ) ;
while (data[i++] != '.' )
    fileName += data[i];
0
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.09.2012, 13:32 #3
http://www.cplusplus.com/reference/string/string/find_last_of/
там даже пример такой же, как у вас
0
co6ak
Кошковед
409 / 502 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
06.09.2012, 13:33 #4
довольно топорно, но должно работать
0
Пaтрик
416 / 391 / 39
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
06.09.2012, 13:36 #5
Выделяление только имя файла
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
06.09.2012, 14:06 #6
можно ли реализовать болие ли мение просто?
boost/filesystem
0
KostyaKulakov
Заблокирован
06.09.2012, 14:09  [ТС] #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
using namespace std;
 
 
int main()
{
    std::string data = "E:\\video\\100_Greatest_Discoveries\\09_fizika.avi";
 
    std::string fileName = "";
    int i = data.length() - 1;
 
    while (data[i--] != '\\' );
 
    while (data[++i] != '.')
    fileName += data[i];
 
    cout << fileName << endl;
}
он выдаёт \09_fizika
а мне нужно
09_fizika.avi

как сделать?
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
06.09.2012, 14:24 #8
подправил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    std::string s = "E:\\video\\100_Greatest_Discoveries\\09_fizika.avi";
    std::string fileName;
    int i;
    for(i = s.length(); (s[i] != '\\') && (s[i] != '/') && i >= 0; --i)
    ;
    while (s[++i] != '\0')
        fileName += s[i];
    cout << fileName << endl;
    return 0;
}
1
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
06.09.2012, 14:25 #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <boost/filesystem.hpp>
int main()
{
 using namespace std;
 using namespace boost::filesystem;
 
 string data = "E:\\video\\100_Greatest_Discoveries\\09_fizika.avi";
 path p(data);
 cout<<p.leaf()<<endl;// 09_fizika.avi 
 
return 0;
}
1
KostyaKulakov
Заблокирован
06.09.2012, 14:33  [ТС] #10
Цитата Сообщение от igorrr37 Посмотреть сообщение
подправил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    std::string s = "E:\\video\\100_Greatest_Discoveries\\09_fizika.avi";
    std::string fileName;
    int i;
    for(i = s.length(); (s[i] != '\\') && (s[i] != '/') && i >= 0; --i)
    ;
    while (s[++i] != '\0')
        fileName += s[i];
    cout << fileName << endl;
    return 0;
}
в vs выходит ошибка.
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.09.2012, 14:39 #11
а в курсе, что у std::string есть ф-я rfind()? или посимвольный перебор своими руками приятнее?
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
06.09.2012, 14:47 #12
C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
using namespace std;
 
  string data = "E:\\video\\100_Greatest_Discoveries\\09_fizika.avi";
  string result= data.substr(data.find_last_of("\\")+1,string::npos);
 
  cout<<result<<endl;
 
return 0;
}
2
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.09.2012, 14:49 #13
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
string result= data.substr(data.find_last_of("\\")+1,string::npos);
а если там не \, а /? а вообще это - самый прямой подход.
0
Avazart
Эксперт С++
7262 / 5434 / 304
Регистрация: 10.12.2010
Сообщений: 24,158
Записей в блоге: 17
06.09.2012, 15:11 #14
От куда там "/" ?

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
system("chcp 1251");
using namespace std;
 
string data = "E:/video/100_Greatest_Discoveries\\09_fizika.avi";
 
size_t ls= data.find_last_of("\\")+1;
size_t rs= data.find_last_of("/")+1;
 
size_t pos = (ls!=string::npos && ls>rs)?ls:rs;
 
string result= data.substr(pos,string::npos);
 
cout<<result<<endl;
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
0
Кот Ангенс
318 / 268 / 38
Регистрация: 24.05.2012
Сообщений: 629
06.09.2012, 15:12 #15
Цитата Сообщение от novi4ok Посмотреть сообщение
или посимвольный перебор своими руками приятнее?
Разумеется, приятнее.
Можно в один проход обработать и прямой, и обратный слэши.
0
06.09.2012, 15:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2012, 15:12
Привет! Вот еще темы с ответами:

Выделяление только имя файла - C++
Написать программу, которая по введённому полному пути к файлу выделяла бы только имя файла (то, что следует после последнего слеша или...

Вызов стороннего приложения без полного пути - C++
Всем доброго времени суток! Подсобите в следующем вопросе пожалуйста: Язык C++ среда разработки Visual Studio 2012, мне требуется...

Не хочет создавать файл без полного пути - C++
Здравствуйте. Вот не могу понять в чем дело: std::ofstream outfile; //откроем файл для записи в бин режиме ...

указание пути к файлу - C++
Столкнулся с проблемой указания пути к файлу. Написал функцию. Вызываю её так: readFile(&quot;test.txt&quot;,stran,&amp;n); в моем случае файл...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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