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

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

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

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

10.09.2011, 15:41. Просмотров 6735. Ответов 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";
        }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2011, 15:41     Обрезать строку
Посмотрите здесь:

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 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
Каратель
Эксперт С++
6553 / 3973 / 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
Каратель
Эксперт С++
6553 / 3973 / 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
Каратель
Эксперт С++
6553 / 3973 / 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++
Здравствуйте, не могли бы вы помочь новичку в программировании))) Нужно написать програмку, которая считывает с клавиатуры строку текста...

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

Функция, которая копирует строку в другую строку заданное количество раз - C++
Помогите!!!! срочно нужна задача. Не знаю как сделать. Разработать функцию, которая копирует строку в другую строку заданное количество...

Поменять местами первую строку и строку сумма элементов которой минимальна - C++
Дан двумерный массив размера NxM. Поменять местами первую строку и строку сумма элементов которой минимальна. Вывести полученную матрицу на...

Матрицы: поменять местами первую строку и строку, содержащую максимальный элемент - C++
1)В матрице поменять местами 1 строку и строку содержащие последнее вхождение элемента максимального где максимальный- максимальный элем...


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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 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     Обрезать строку
Ответ Создать тему
Опции темы

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