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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.83
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
#1

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

10.09.2011, 15:41. Просмотров 7135. Ответов 9
Метки нет (Все метки)

Здравствуйте,такая проблема
когда указываю путь для поиска файлов то в конце пути "*"
а чтобы открыть этот файл Мненадо к введенному пути приклеить имя файла и чтобы путь оказался правильным стереть этот "*"
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";
        }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2011, 15:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обрезать строку (C++):

Обрезать строку до первого пробела - C++
Первое, что пришло в голову: #include &lt;iostream&gt; using namespace std; void getWord ( char * words ) { char word; ...

Обрезать строку при вводе через fgets - C++
Всем доброго времени суток! Столкнулся с такой проблемой - заполняю список значений следующей процедурой void addToQueue(T_Queue...

Как обрезать строку типа wchar_t* до определенного символа? - C++
собственно вопрос в названии тему, запнулся казалось бы на самом простом, некогда не любил работу со строками...

Обрезать файл сверху, возможно ли? - C++
Можно ли обрезать файл сверху перезаписав его указатель на кол-во считанных байт ?) Например адрес начала файла 0x1, адрес конца 0xA -...

Обрезать пробелы в конце строки. - C++
Задача образеть пробелы в конце строки(строка может быть очень большой). Строка передаётся в функцию void TrimRight( char *s ), нужно...

Обрезать/скопировать string до определенного символа - C++
Есть ли библиотечная функция для данных типа string, которая урезает или копирует строку до определенного символа?Типа strtok для char'ов....

9
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 15:47 #2
Цитата Сообщение от ganjawar Посмотреть сообщение
в конце пути "*"
ну дык присвойте последнему символу ноль

Добавлено через 50 секунд
Цитата Сообщение от ganjawar Посмотреть сообщение
к введенному пути приклеить имя файла
strcat в помощь
1
ganjawar
0 / 0 / 0
Регистрация: 09.09.2011
Сообщений: 40
10.09.2011, 15:50  [ТС] #3
Если не сложно напишите код присвоениея нуля..желательно в контексте моей программы..Я в С++ не силен(
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 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;
1
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";
        }
даже если имя равно "." или ".." все равно заходит
дело в кодировке??
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 16:41 #6
Цитата Сообщение от ganjawar Посмотреть сообщение
FindFileData.cFileName!=".."
Си строки нужно стравнивать используя strcmp

Добавлено через 1 минуту
Цитата Сообщение от ganjawar Посмотреть сообщение
&
& - это битовая операция "И", а вам нужно логическое "И" - &&
1
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 и при след заходе в функцию корневой путь не правильный..Я вроде не передаю адрес..почему так?
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 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);
1
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]"
Не существует преобразований в типы массивов, хотя существуют преобразования в ссылки или указатели на массивы
???
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.09.2011, 17:04 #10
сделайте без присваивания
C++
1
strcat(path, FindFileData.cFileName);
1
10.09.2011, 17:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2011, 17:04
Привет! Вот еще темы с ответами:

Как обрезать N байт в конце файла не перезаписывая его? - C++
Как обрезать N байт в конце файла не перезаписывая его?

Ввести строку текста и строку поиска, найти местоположение первого вхождения строки поиска в строку текста - C++
Здравствуйте, не могли бы вы помочь новичку в программировании))) Нужно написать програмку, которая считывает с клавиатуры строку текста...

Как "обрезать" ненужную часть массива? - C++
Как видите, я задаю размер массиву, да. И показывает список элементов тогда, когда разность больше максимального и минимального элемента...

Описать строку А. Из входной последовательности символов записать в строку А только цифры - C++
Описать строку А. Из входной последовательности символов записать в строку А только цифры.


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

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

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