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

Обрезать строку - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.83
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
10.09.2011, 15:41     Обрезать строку #1
Здравствуйте,такая проблема
когда указываю путь для поиска файлов то в конце пути "*"
а чтобы открыть этот файл Мненадо к введенному пути приклеить имя файла и чтобы путь оказался правильным стереть этот "*"
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
#include<windows.h>
#include<iostream>
#include<string>
#include <stdio.h>
using namespace std;
 
void crypt(WIN32_FIND_DATAA FindFileData,LPCSTR Dir);
int main(){
    WIN32_FIND_DATAA FindFileData;  //структура файла
    HANDLE hf;
    LPCSTR Dir;
    char a[15];
    Dir="c:\\*";        //путь по умолчанию
 
    printf("input dir\n");      //ввод пути
    cin>>a;
    Dir=(LPCSTR)a;          //явное преобразование для передачи в функцию поиска
      
    hf=FindFirstFileA(Dir, &FindFileData);
    if (hf!=INVALID_HANDLE_VALUE){
        do{
            crypt(FindFileData,Dir);
          }while (FindNextFileA(hf,&FindFileData)!=0);
                FindClose(hf);
        }
        getchar ();
}
void crypt(WIN32_FIND_DATAA FindFileData,LPCSTR Dir)
{
        FILE *stream;
        LPCSTR path;
        //path=Dir-1;
        if ((FindFileData.cFileName!="..") & (FindFileData.cFileName!=".") & (FindFileData.cFileName!=NULL))
        {
            stream = fopen(FindFileData.cFileName,"r+");
            std::cout << FindFileData.cFileName << "\n";
        }
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 15:47     Обрезать строку #2
Цитата Сообщение от ganjawar Посмотреть сообщение
в конце пути "*"
ну дык присвойте последнему символу ноль

Добавлено через 50 секунд
Цитата Сообщение от ganjawar Посмотреть сообщение
к введенному пути приклеить имя файла
strcat в помощь
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
10.09.2011, 15:50  [ТС]     Обрезать строку #3
Если не сложно напишите код присвоениея нуля..желательно в контексте моей программы..Я в С++ не силен(
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 16:08     Обрезать строку #4
C++
1
2
3
4
#include <cstring>
...
char a[15];
a[strlen(a) - 1] = 0;
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
10.09.2011, 16:25  [ТС]     Обрезать строку #5
error C3892: path: невозможно присваивать значения переменной, которая объявлена как константа
C++
1
2
3
4
5
6
LPCSTR path;
        int lenght;
        lenght=strlen(Dir);
        //Dir[lenght-1]=0;
        path=Dir;
        path[strlen(path)-1]=0;
константу не кто не объявлял

Добавлено через 13 минут
Ответ нашел
LPCSTR это const char
преобразовал в LPSTR
и еще один вопрос где идет условие
C++
1
2
3
4
5
if ((FindFileData.cFileName!="..") & (FindFileData.cFileName!=".") & (FindFileData.cFileName!=NULL))
        {
            stream = fopen(FindFileData.cFileName,"r+");
            std::cout << FindFileData.cFileName << "\n";
        }
даже если имя равно "." или ".." все равно заходит
дело в кодировке??
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 16:41     Обрезать строку #6
Цитата Сообщение от ganjawar Посмотреть сообщение
FindFileData.cFileName!=".."
Си строки нужно стравнивать используя strcmp

Добавлено через 1 минуту
Цитата Сообщение от ganjawar Посмотреть сообщение
&
& - это битовая операция "И", а вам нужно логическое "И" - &&
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
10.09.2011, 16:47  [ТС]     Обрезать строку #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void crypt(WIN32_FIND_DATAA FindFileData,LPCSTR Dir)
{
        FILE *stream;
        LPSTR path;
 
        if ((strcmp(FindFileData.cFileName,".")==0) & (strcmp(FindFileData.cFileName,"..")==0))//нам нужен только файл
        {   
            std::cout << FindFileData.cFileName << "\n";
        }else{
            path=(LPSTR)Dir;//преобразуем из LPCSTR(const char) в LPSTR(char)
            path[strlen(path)-1]=0; //удаляем "*"
            //path=strcat(path,FindFileData.cFileName);
            //stream = fopen(path,"r+");
            path="";
        }
 
}
Тут проблема в том что при обрезании конца обрезается не только path но и Dir и при след заходе в функцию корневой путь не правильный..Я вроде не передаю адрес..почему так?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 16:52     Обрезать строку #8
Цитата Сообщение от ganjawar Посмотреть сообщение
Я вроде не передаю адрес..почему так?
все что начинается с LP - адрес - Long Pointer

замените
C++
1
LPSTR path;
на
C++
1
char path[20] = { 0 };
, а
C++
1
path=(LPSTR)Dir;
на
C++
1
strcpy(path, Dir);
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
10.09.2011, 16:56  [ТС]     Обрезать строку #9
а как МНе быть с
C++
1
path=strcat(path,FindFileData.cFileName);
error C2440: =: невозможно преобразовать "char *" в "char [20]"
Не существует преобразований в типы массивов, хотя существуют преобразования в ссылки или указатели на массивы
???
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2011, 17:04     Обрезать строку
Еще ссылки по теме:

C++ Обрезать/скопировать string до определенного символа
Ввести строку текста и строку поиска, найти местоположение первого вхождения строки поиска в строку текста C++
C++ Обрезать файл сверху, возможно ли?

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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 17:04     Обрезать строку #10
сделайте без присваивания
C++
1
strcat(path, FindFileData.cFileName);
Yandex
Объявления
10.09.2011, 17:04     Обрезать строку
Ответ Создать тему
Опции темы

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