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

Задача на строки: Вывести директорию файла. - C++

Восстановить пароль Регистрация
 
MrGadik
0 / 0 / 0
Регистрация: 10.07.2010
Сообщений: 25
30.01.2012, 17:50     Задача на строки: Вывести директорию файла. #1
Задача: из полного адреса файла выделить его основную директорию. Если файл находится в корневой директории, вывести символ "\". Считать что адрес введен всегда правильно.

Короче, если дан адрес C:\AMD\Catalyst_Mobility_64-Bit_Util.exe на экран вывести AMD.


Вот наброски:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "stdafx.h"
#include <iostream>
#include "stdio.h"
#include "string.h"
#include <conio.h>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{unsigned int i,d,j;
 char str[20],temp[10];
 printf("Enter full adress of file: \n");
 gets(str);
 d=0;                                           //тупейший прерыватель цикла =)
 j=0;
 for(i=strlen(str);d!=1;i--)                    //цикл, просмотр строки с конца
 {
     if (str[i]=='\\')                          //если очередной символ является "\"...
         if (str[i--]==':')                     //...и если следующий символ - ":" то выводим "\"
         {
             printf("\n %d \\ \n",i);
             d=1;
         }
         else                                   //...записываем символы в буфер до следующего "\"
        {
            i--;
            do                              
            {
                temp[j]=str[i];
                i--;
                d=1;
            }
              while (str[i]=='\\');
              puts(temp);                       //вывод папки в обратном порядке
         }
 }
 
 
    _getch();
    return 0;
}
Но работает не корректно. Пожалуйста, помогите найти ошибку.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2012, 17:50     Задача на строки: Вывести директорию файла.
Посмотрите здесь:

Считать строки из файла, и вывести те что начинаются с тире C++
C++ Вывести строки файла, после строки добавляя, сколько раз в ней встретилось слово
Вывести текущую директорию C++
C++ Строки и структуры. Cчитать из текстового файла три предложения и вывести их в об-ратном порядке
Вывести все строки файла, содержащие более 30 символов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
30.01.2012, 18:22     Задача на строки: Вывести директорию файла. #2
Цитата Сообщение от MrGadik Посмотреть сообщение
Короче, если дан адрес C:\AMD\Catalyst_Mobility_64-Bit_Util.exe на экран вывести AMD.
- Вот код на Си
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
28
#include <stdio.h>
#include <string.h>
 
int main()
{
    char * ptr = NULL;//Указатель на слеш
    char szFilePath[256] = {0};
    while(true)
    {
        printf("Enter full path :\n");
        scanf("%[^\n]",szFilePath);
        getchar();//Убираем из буфера \n от ввода
        printf("Parant DIR name :\n");
        ptr = strrchr(szFilePath,'\\');
        if(!ptr)
            printf("Input string is not valid pathname!\n");
        else
        {
            szFilePath[strlen(szFilePath) - strlen(ptr)] = '\0';
            ptr = strrchr(szFilePath,'\\');
            if(!ptr)
                printf("\\\n");
            else
                printf("%s\n",ptr + 1);//+1 чтобы слеш перед именем убрать
        }
    }
    return 0;
}
Миниатюры
Задача на строки: Вывести директорию файла.  
MrGadik
0 / 0 / 0
Регистрация: 10.07.2010
Сообщений: 25
31.01.2012, 15:37  [ТС]     Задача на строки: Вывести директорию файла. #3
Спасибо! Работает)
Только пару моментов не очень понятны...

C++
1
char * ptr = NULL;      //Указатель на слеш
а где слеш?


C++
1
scanf("%[^\n]",szFilePath);
что тут происходит? Не понятно что значит "%[^\n]"

Если можно, разъясните, буду вдвойне признателен.
-=ЮрА=-
Заблокирован
Автор FAQ
31.01.2012, 16:10     Задача на строки: Вывести директорию файла. #4
Цитата Сообщение от MrGadik Посмотреть сообщение
а где слеш?
- это начальная инициализация
напрмер тебе надо посчитать 5 + 4
C++
1
2
3
int a = 5; //Вот начальная инициализация
a = a + 4; 
cout<<a;
Цитата Сообщение от MrGadik Посмотреть сообщение
Не понятно что значит "%[^\n]"
- значит считать строку с пробелами %s считывает только токен(т.е. слово) а [^\n] всё до символа \n
С:\Мои документы
%s считает С:\Мои
[^\n] считает С:\Мои документы
MrGadik
0 / 0 / 0
Регистрация: 10.07.2010
Сообщений: 25
03.02.2012, 21:39  [ТС]     Задача на строки: Вывести директорию файла. #5
Большое спасибо, кажется разобрался, надеюсь что правильно.
-=ЮрА=-
Заблокирован
Автор FAQ
03.02.2012, 21:48     Задача на строки: Вывести директорию файла. #6
Цитата Сообщение от MrGadik Посмотреть сообщение
Большое спасибо, кажется разобрался, надеюсь что правильно.
- а почему надеюсь, что то всё же ещё вызывает сложности с пониманием???Пишите!
MrGadik
0 / 0 / 0
Регистрация: 10.07.2010
Сообщений: 25
05.02.2012, 13:06  [ТС]     Задача на строки: Вывести директорию файла. #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- а почему надеюсь, что то всё же ещё вызывает сложности с пониманием???Пишите!
Ну просто я не очень понимаю саму работу алгоритма. Насколько я знаю, оператор strrchr находит последнее вхождение символа в строку. И если я все правильно понимаю, то мне и нужно найти последнее вхождение "\" в строку адреса. Но тогда где ptr присваивается "\"? и что сам по себе должен вернуть strrchr? Что-то я совсем запутался...
-=ЮрА=-
Заблокирован
Автор FAQ
05.02.2012, 16:37     Задача на строки: Вывести директорию файла. #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
char * ptr = NULL;//Указатель на слеш
Пошагово
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
scanf("%[^\n]",szFilePath);
szFilePath == C:\AMD\Catalyst_Mobility_64-Bit_Util.exe
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ptr = strrchr(szFilePath,'\\');
ptr == \Catalyst_Mobility_64-Bit_Util.exe
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
szFilePath[strlen(szFilePath) - strlen(ptr)] = '\0';
szFilePath == C:\AMD[\0]Catalyst_Mobility_64-Bit_Util.exe == C:\AMD
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ptr = strrchr(szFilePath,'\\');
ptr == \AMD
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
printf("%s\n",ptr + 1);
ptr + 1 == AMD
MrGadik
0 / 0 / 0
Регистрация: 10.07.2010
Сообщений: 25
07.02.2012, 21:11  [ТС]     Задача на строки: Вывести директорию файла. #9
Все, вроде бы понял
Затупил немного. Спасибо! Прошу прощения что заставил так разжевывать)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2012, 22:08     Задача на строки: Вывести директорию файла.
Еще ссылки по теме:

Вывести числа после второго пробела из первой строки файла C++
C++ Считать текст из файла, и вывести на экран только строки, содержащие двузначные числа
Прочитать строки из файла в массив строк, и вывести на экран данные по условию C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
07.02.2012, 22:08     Задача на строки: Вывести директорию файла. #10
Цитата Сообщение от MrGadik Посмотреть сообщение
Прошу прощения что заставил так разжевывать
- всё ок, главное, что понимание всё-таки пришло - это и есть моя цель
Yandex
Объявления
07.02.2012, 22:08     Задача на строки: Вывести директорию файла.
Ответ Создать тему
Опции темы

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