Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.97
KostyaKulakov
Заблокирован
06.09.2012, 13:24     Из полного пути к файлу выделить только имя файла #1
Написать программу, которая по введённому полному пути к файлу выделяла бы
только имя файла (то, что следует после последнего слеша или обратного слеша).
Например, ввод:
E:\video\100_Greatest_Discoveries\09_fizika.avi
вывод:
09_fizika.avi
Использовать класс std::string

можно ли реализовать болие ли мение просто? чтобы было понятно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
co6ak
Кошковед
 Аватар для co6ak
403 / 496 / 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];
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.09.2012, 13:32     Из полного пути к файлу выделить только имя файла #3
http://www.cplusplus.com/reference/s.../find_last_of/
там даже пример такой же, как у вас
co6ak
Кошковед
 Аватар для co6ak
403 / 496 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
06.09.2012, 13:33     Из полного пути к файлу выделить только имя файла #4
довольно топорно, но должно работать
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
06.09.2012, 13:36     Из полного пути к файлу выделить только имя файла #5
Выделяление только имя файла
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
06.09.2012, 14:06     Из полного пути к файлу выделить только имя файла #6
можно ли реализовать болие ли мение просто?
boost/filesystem
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

как сделать?
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 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;
}
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 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;
}
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 выходит ошибка.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.09.2012, 14:39     Из полного пути к файлу выделить только имя файла #11
а в курсе, что у std::string есть ф-я rfind()? или посимвольный перебор своими руками приятнее?
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 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;
}
novi4ok
549 / 502 / 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);
а если там не \, а /? а вообще это - самый прямой подход.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 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;
}
//---------------------------------------------------------------------------
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
06.09.2012, 15:12     Из полного пути к файлу выделить только имя файла #15
Цитата Сообщение от novi4ok Посмотреть сообщение
или посимвольный перебор своими руками приятнее?
Разумеется, приятнее.
Можно в один проход обработать и прямой, и обратный слэши.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
06.09.2012, 16:01     Из полного пути к файлу выделить только имя файла #16
 Комментарий модератора 
KostyaKulakov, не дублируйте темы - это нарушает правила форума!

Цитата Сообщение от Кот Ангенс Посмотреть сообщение
Можно в один проход обработать и прямой, и обратный слэши.
find_last_of
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
06.09.2012, 16:16     Из полного пути к файлу выделить только имя файла #17
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
2
size_t ls= data.find_last_of("\\")+1;
size_t rs= data.find_last_of("/")+1;
как баден-баден прямо. зачем дважды?
C++
1
size_t ls= data.find_last_of("\\/")+1;
PSIAlt
 Аватар для PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
06.09.2012, 16:22     Из полного пути к файлу выделить только имя файла #18
C++
1
2
3
std::string path ="E:\\video\\100_Greatest_Discoveries\\09_fizika.avi";
std::string file = path.substr( path.rfind('\\')+1 );
std::cout << "File name: " << file << std::endl;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2012, 18:24     Из полного пути к файлу выделить только имя файла
Еще ссылки по теме:

C++ Не хочет создавать файл без полного пути
C++ Выделить из строки имя файла без расширения
Вызов стороннего приложения без полного пути C++

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,621
Записей в блоге: 17
06.09.2012, 18:24     Из полного пути к файлу выделить только имя файла #19
зачем дважды?
От не знания find_last_of()
Yandex
Объявления
06.09.2012, 18:24     Из полного пути к файлу выделить только имя файла
Ответ Создать тему
Опции темы

Текущее время: 03:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru