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

Что тут не так? - C++

Восстановить пароль Регистрация
 
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 220
25.03.2014, 15:30     Что тут не так? #1
Не понимаю - почему программа не работает... Если все string Заменить на массивы char, то всё нормально работает. В чем дело?

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <windows.h> 
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
 
void GetTags(string fileName, string tags);
void ClearArray(string arr);
/*void CutSome(string edited);*/
 
int main(){
    setlocale(LC_ALL,"Russian");
    fstream f;
    int imgId = 529;
    string fileUrl = "";
    string tags = "";
    f.open("file.sql", ios::out);
    WIN32_FIND_DATA findImg;
// Нахождение самого первого файла
    f << "INSERT INTO images" << endl << "(`imgId`, `fullName`, `tags`, `fileName`)"<<endl<<"VALUES"<<endl;
    HANDLE find = FindFirstFile("*.jpg", &findImg);
    if(find != INVALID_HANDLE_VALUE){
    GetTags(findImg.cFileName, tags);  // редактирование названия картинки для тегов
    f << "('"<< imgId << "', '" << findImg.cFileName << "', '" << tags << "', '"<< findImg.cFileName <<"');" << endl;
    imgId++;
    } else {
        cout<<"Error! Can't find any image...";
    }
// Поиск других файлов
    while (FindNextFile(find, &findImg)){
        ClearArray(tags);
        GetTags(findImg.cFileName, tags); // редактирование названия картинки для тегов
        f << "('"<< imgId << "', '" << findImg.cFileName << "', '" << tags << "', '"<< findImg.cFileName <<"');" << endl;
        imgId++;
    }
// Закрыть
    FindClose(find);
    f.close();
 
    system("PAUSE");
    return 0;
}
 
void GetTags(string fileName, string tags){
    for ( int i = 0; i < fileName.length(); i++) {
        if ((fileName[i] == ' ' || fileName[i] == '-')){
            tags[i] = ',';
        } else if (fileName[i] == '.') {
            break;
        }  else {
            tags[i] = fileName[i];
        }
    }
    /*CutSome(tags);*/
    cout<<tags<<endl;
}
 
/*void CutSome(string edited){
    for ( int i = 0; i < edited.length(); i++){
        if((edited[i] == '(' || edited[i] == ')') && (edited[i-1] == ',' || edited[i+1] == ',')){
            edited.erase(i, i+1);
        }
    }
}*/
 
void ClearArray(string arr){
    for(int i = 0; i < arr.length(); i++){
        arr[i] = '\0';
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2014, 15:30     Что тут не так?
Посмотрите здесь:

C++ Что тут не так?
строки. что-то тут не так C++
что тут не так??? C++
C++ Делаю сапёр. что тут не так????
Что тут не так? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,165
Завершенные тесты: 1
25.03.2014, 15:44     Что тут не так? #2
В функции
C++
1
2
3
4
5
6
7
8
9
10
void CutSome(string edited)
{
    for ( int i = 0; i < edited.length(); i++)
    {
        if((edited[i] == '(' || edited[i] == ')') && (edited[i-1] == ',' || edited[i+1] == ','))
        {
            edited.erase(i, i+1);
        }
    }
}
Не хватало закрывающей скобки
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 220
25.03.2014, 16:17  [ТС]     Что тут не так? #3
Ну ту часть я закомментил, там пока не разбирался. Тут со строчками проблема, информация не помещается туда. Если, допустим, сделать так:
C++
1
string fileUrl = "fsafafgfgfgdfgdsfhfsfgsdffsgsfdggdf"
- то всё работает, тоесть изначально туда не вмещается ничего - как это можно исправить не задавая начальное значение строке?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.03.2014, 17:20     Что тут не так? #4
Вопрос непонятен. Куда что не помещается?

Добавлено через 5 минут
fileUrl где в коде используется? Если строка пустая, то нельзя по индексу обращаться к её содержимому.

Добавлено через 8 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void GetTags(string fileName, string tags){
    for ( int i = 0; i < fileName.length(); i++) {
        if ((fileName[i] == ' ' || fileName[i] == '-')){
            tags += ',';
        } else if (fileName[i] == '.') {
            break;
        }  else {
            tags += fileName[i];
        }
    }
    /*CutSome(tags);*/
    cout<<tags<<endl;
}
Yandex
Объявления
25.03.2014, 17:20     Что тут не так?
Ответ Создать тему
Опции темы

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