Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 15.03.2020
Сообщений: 2
1

Слияние строк

15.03.2020, 20:42. Просмотров 134. Ответов 1
Метки нет (Все метки)

Разработать программу для упрощения работы с путем (Path) к файлу в файловой системе. Привязку к реальному диску делать необязательно. Реализовать:
а)функцию определения того, является ли путь каталогом или файлом;
б)функцию, которая возвращает только имя файла (с расширением или нет);
в)функцию, которая выполняет слияние двух путей и возвращает новое (например, слияние “C:/abc/” и “/homework/skyrim.exe” даст “C:/abc/homework/skyrim.exe”).
Решая задачу в рамках ООП, необходимо составить класс для представления пути к файлу или каталогу в файловой системе




#include <iostream>
#include <string>
using namespace std;
class Path
{
private:
string way;
public:
Path(string str):way(str)
{}
bool catalog_or_file()
{
int i = 0;
for( i= way.length(); way[i]!='/';i--)
{
if (way [i]=='.')
{
return true;// true=файл
}
}
return false;
}
string vozvratimeny()
{
int i = 0;
string str="";
bool triger = 0;
for( i= way.length();way[i]!='/';i--)
{
if (way[i]=='.'){
str="";
triger = 1;
continue;
}
str=way[i]+str;
}
if (triger==1)
{
return str;
}
else {
return "";
}
}
string slianie()
};
int main() {
string str;
getline( cin, str);
cout << str.length()<<endl;
Path path1(str);
bool a = path1.catalog_or_file();
cout << a <<endl;
cout << path1.vozvratimeny();
return 0;
}
нужно дописать пункт ,,В,,
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2020, 20:42
Ответы с готовыми решениями:

Слияние двух строк
Как соединить (конкатенировать) две строки на С? Помогите, пожалуйста

Слияние строк времени компиляции
Добрый день. Есть строки времени компиляции: constexpr const char *str1 = &quot;QWERTY&quot;; constexpr...

Преобразование int в string и слияние строк
int KeysOfFile+=1; string KeysOfFileS=KeysOfFile; string ...

Слияние двух строк с перестановкой символов
Необходимо произвести слияние 2х строк, вводимых в консоль и вывод третьей строки, объединяющей в...

1
Параллельный Кот
1899 / 822 / 349
Регистрация: 25.03.2016
Сообщений: 2,039
15.03.2020, 22:09 2
Цитата Сообщение от dsarew Посмотреть сообщение
C++
1
2
3
4
if (way [i]=='.')
{
return true;// true=файл
}
Возможно я вас огорчу, но наличие точки в имени совсем не означает, что это файл, поскольку в имени папки так же может присутствовать точка. Пытаться определить тип объекта только по его имени равносильно гаданию на кофейной гуще. Разве что считать путь, оканчивающийся на / папкой, иначе файлом. Но это не точно.

Цитата Сообщение от dsarew Посмотреть сообщение
б)функцию, которая возвращает только имя файла (с расширением или нет);
Найти последний / и все, что после него - имя, иначе весь путь является именем.
C++
1
2
3
4
5
6
7
8
9
10
11
12
    string getFileName() const {
        const size_t delim_pos = way.rfind("/");
//        size_t delim_pos = string::npos;
//        for (size_t i = way.length() - 1; i != string::npos; --i) {
//            if (way[i] == '/') {
//                delim_pos = i;
//                break;
//            }
//        }
 
        return (delim_pos == string::npos ? way : way.substr(delim_pos + 1));
    }
Добавлено через 4 минуты
Тест

(взят здесь)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Path path_list[] = {
    string("/foo/bar.txt"),
    string("/foo/.bar"),
    string("/foo/bar/"),
    string("/foo/."),
    string("/foo/.."),
    string("."),
    string(".."),
    string("/"),
    string("//host")
};
 
for (const Path &path : path_list) {
    cout << "\"" << path.getFileName() << "\"" << endl;
}
Output:
Код
"bar.txt"
".bar"
""
"."
".."
"."
".."
""
"host"


Добавлено через 22 минуты
Цитата Сообщение от dsarew Посмотреть сообщение
с расширением или нет
Сначала подумал, что это значит "не важно, с расширением или нет". Но скорее всего необходимо обеспечить выбор. Тогда еще нужно найти точку, если она не на первом и не на последнем месте, то отбросить расширение.

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    string getFileName(bool include_ext = true) const {
        const size_t delim_pos = way.rfind("/");
//        size_t delim_pos = string::npos;
//        for (size_t i = way.length() - 1; i != string::npos; --i) {
//            if (way[i] == '/') {
//                delim_pos = i;
//                break;
//            }
//        }
        string filename = (delim_pos == string::npos ? way : way.substr(delim_pos + 1));
        if (!include_ext) {
            const size_t ext_pos = filename.rfind(".");
//            size_t ext_pos = string::npos;
//            for (size_t i = filename.length() - 1; i != string::npos; --i) {
//                if (filename[i] == '.') {
//                    ext_pos = i;
//                    break;
//                }
//            }
 
            if ((ext_pos != 0) && (ext_pos != filename.length() - 1)) {
                filename = filename.substr(0, ext_pos);
            }
        }
 
        return filename;
    }
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2020, 22:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перегрузка операторов и слияние строк типа char*
Доброго времени суток! Есть класс, для объектов которого перегружен оператор +. Класс представляет...

Динамический двумерный массив строк и операции со строками (поиск, обрезка, слияние)
Создать динамический двумерный массив на 10 ячеек (для десяти строк). Заполнить его строчками...

Слияние массивов
я новичек в программировании. Помогите пожалуйста решить слудеющию задачу на С++. Заданы три...

Бинарное слияние
Не получается реализовать алгоритм. Хелп плз. ...


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

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

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