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

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

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

[C++] Дана строка. Получить подстроку расположенную... - C++

08.03.2012, 21:47. Просмотров 2012. Ответов 20
Метки нет (Все метки)

Помогите код дописать пожалуйста в лабе,.. нужно еще одно что бы условие выполнялось, нужно, чтобы имя файла, из которого читается строка, и имя файла, в который записывается, вводились из командной строки.
Сама программа работает но нужно еще подшаманить немного над ней.
Миниатюры
[C++] Дана строка. Получить подстроку расположенную...  
Вложения
Тип файла: zip Lab2.zip (853.2 Кб, 10 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2012, 21:47     [C++] Дана строка. Получить подстроку расположенную...
Посмотрите здесь:
Дана строка S. Необходимо получить подстроку, расположенную между первым и последним пробелом исходной строки C++
Необходимо получить подстроку, расположенную между первым и последним пробелом исходной строки C++
Дана строка и подстрока; вставить подстроку после каждого вхождения 'AB' в строке C++
Дана строка. Удалить из нее самую длинную подстроку, что состоит из цифр C++
Дана строка, состоящая из букв, цифр, запятых, точек, знаков «+» и «–». Выделить подстроку, которая соответствует записи целого числа. C++
Дана строка символов, состоящая из букв, цифр, запятых, точек, знаков «+» и «–». Выделить подстроку, которая соответствует записи вещественного числа C++
Вывести подстроку, расположенную между первым и вторым пробелом исходной строки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
10.03.2012, 01:56     [C++] Дана строка. Получить подстроку расположенную... #16
Тот же алгоритм только с вводом имён файлов непосредственно в коносли
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
73
74
75
76
77
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
 
//Функция осуществляет доступ для записи к файлу с путём fpath
//если доступ не получен возвращаемое значение ЛОЖЬ (false)
bool  AccessToFile(fstream &fs, char * fpath, int flag);
//Возвращает подстроку между первым и след за ним символом symbol
//Возвращаемое значение 0 - если строка не содержит symbol
//1 - если в строке 1 symbol
//2 - если в строке не меньше 2-х symbol
//Исходная строка char *str в процессе работі функции изменяется
int ParseString(char *str, char symbol);
 
int main(/*int argc, char *argv[]*/)
{
    int nSymbols;//Будет содержать в себе число двоеточей 0,1 или 2
    char str[256];
    char path1[32], path2[32];
    fstream fs1, fs2;
    cout<<"Enter filename with input : ";cin>>path1;
    cout<<"Enter filename with output: ";cin>>path2;
    if(AccessToFile(fs1, path1, ios::in))//Первый файл пытаемся открыть для чтения
    if(AccessToFile(fs2, path2, ios::out))//Второй файл пытаемся открыть для записи
    {
        //Сюда попадём если открыли оба файла
        fs1.getline(str, 256);
        cout<<"Input string> "<<str<<endl;
        if(!(nSymbols = ParseString(str, ':')))
            cout<<"String not contain \':\'\n";
        else
        {
            cout<<"String contain : "<<nSymbols<<" \':\'"<<endl
                <<"Substring> "<<str<<endl;
            fs2<<str;
        }
        fs1.close();
        fs2.close();
    }
    system("pause");
    return 0;
}
 
bool  AccessToFile(fstream &fs, char * fpath, int flag)
{
    bool bAccess = false;//Вначале полагаем что доступ к файлу
    //получить не удалось
    fs.open(fpath, flag);
    if(!fs)
        cout<<"Error open : "<<fpath<<endl;
    else
        bAccess = true;//Всё ок
    return bAccess;
}
 
int  ParseString(char * str, char symbol)
{
    int i, ifirst, nSymbols = 0;
    bool bFirst = false;//Флаг что найден первый символ
    for(i = 0; str[i] != '\0' && nSymbols < 2; i++)
    {
        if(str[i] == symbol)
        {
            if((nSymbols++) == 2)//Если нашли 2 символа
                str[i] = '\0'; //подрезаем строку по последнему symbol
            if(!bFirst)
            {
                ifirst = i;//Запоминаем позицию 1-го symbol
                bFirst = true;
            }
        }
    }
    if(nSymbols)
        strcpy(&str[0],&str[ifirst + 1]);
    return nSymbols;
}
Миниатюры
[C++] Дана строка. Получить подстроку расположенную...  
-=ЮрА=-
Заблокирован
Автор FAQ
10.03.2012, 02:03     [C++] Дана строка. Получить подстроку расположенную... #17
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
strcpy(&str[0],&str[ifirst + 1]);
- возможно эта строка вызовет некоторые сложности с пониманием, поэтому привожу аналогичный по функционалу код поясняющий работу strcpy
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
int  ParseString(char * str, char symbol)
{
    int i, ifirst, nSymbols = 0;
    bool bFirst = false;//Флаг что найден первый символ
    for(i = 0; str[i] != '\0' && nSymbols < 2; i++)
    {
        if(str[i] == symbol)
        {
            if((nSymbols++) == 2)//Если нашли 2 символа
                str[i] = '\0'; //подрезаем строку по последнему symbol
            if(!bFirst)
            {
                ifirst = i;//Запоминаем позицию 1-го symbol
                bFirst = true;
            }
        }
    }
    if(nSymbols)
    {
        for(i = 0; str[i + ifirst + 1] != '\0'; i++)
            str[i] = str[i + ifirst + 1];
        str[i] = '\0';
    }
    return nSymbols;
}
Добавлено через 1 минуту
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(nSymbols)
* * * * {
* * * * * * * * for(i = 0; str[i + ifirst + 1] != '\0'; i++)
* * * * * * * * * * * * str[i] = str[i + ifirst + 1];
* * * * * * * * str[i] = '\0';
* * * * }
- в цикле смещаем влево символы строки str на позицию + 1 символа : - т.е как бы вытираем символы в строке следующее перед двоеточием. +1 - означает что и двоеточие тоже вытираем(а зачем оно нам)
dimakaz5194
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 40
12.03.2012, 12:49  [ТС]     [C++] Дана строка. Получить подстроку расположенную... #18
Помогите пожалуйста реализовать обработку нного количества строк... а то обрабатывает только одну оч срочно нужно
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
73
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
 
//Возвращает подстроку между первым и след за ним символом symbol
//Возвращаемое значение 0 - если строка не содержит symbol
//1 - если в строке 1 symbol
//2 - если в строке не меньше 2-х symbol
//Исходная строка char *str в процессе работы функции изменяется
int ParseString(char *str, char symbol);
 
int main(int argc, char *argv[])
{
    int nSymbols;//Будет содержать в себе число двоеточей 0,1 или 2
    char str[256];
    char path1[32], path2[32];
    fstream fs1, fs2;
    if(argc < 3)//Если не передали аргументами пути к файлам
        //извещаем об этом и выходим
        cout<<"Not enough arguments!\n";
    else
    {
        fs1.open(argv[1], ios::in);//Первый файл пытаемся открыть для чтения
        fs2.open(argv[2], ios::out);//Второй файл пытаемся открыть для записи
        fs1.getline(str, 256);
        if(!fs1 || !fs2)
            cout<<"Error of open files\n";
        else
        {
            cout<<"Input string> "<<str<<endl;
            if(!(nSymbols = ParseString(str, ':')))
                cout<<"String not contain \':\'\n";
            else
            {
                cout<<"String contain : "<<nSymbols<<" \':\'"<<endl
                    <<"Substring> "<<str<<endl;
                fs2<<str;
            }
            fs1.close();
            fs2.close();
        }
    }
    system("pause");
    return 0;
}
 
int ParseString(char * str, char symbol)
{
    int i, ifirst = -1,ilast = -1, nSymbols = 0;
    bool bFirst = false;//Флаг что найден первый символ
    for(i = 0; str[i] != '\0' && nSymbols < 2; i++)
        {
            if(str[i] == symbol)
            {
                      if((nSymbols++) == 2)//Если нашли 2 символа
                      str[i] = '\0'; //подрезаем строку по последнему symbol
                      if(!bFirst)
                      {
                                 ifirst = i;//Запоминаем позицию 1-го symbol
                                 bFirst = true;
                                 }
                      }
            }
if(nSymbols)
{
ilast = i - 1;
for(i = 0; i < ilast - ifirst; i++)
str[i] = str[i + ifirst + 1];
str[ilast - ifirst - 1] = '\0';
}
return nSymbols;
}
-=ЮрА=-
Заблокирован
Автор FAQ
13.03.2012, 14:31     [C++] Дана строка. Получить подстроку расположенную... #19
dimakaz5194, вот и все преобразования
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
73
74
75
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
 
//Возвращает подстроку между первым и след за ним символом symbol
//Возвращаемое значение 0 - если строка не содержит symbol
//1 - если в строке 1 symbol
//2 - если в строке не меньше 2-х symbol
//Исходная строка char *str в процессе работі функции изменяется
int ParseString(char *str, char symbol);
 
int main(int argc, char *argv[])
{
    int nSymbols;//Будет содержать в себе число двоеточей 0,1 или 2
    char str[256];
    fstream fs1, fs2;
    if(argc < 3)//Если не передали аргументами пути к файлам
        //извещаем об этом и выходим
        cout<<"Not enough arguments!\n";
    else
    {
        fs1.open(argv[1], ios::in);//Первый файл пытаемся открыть для чтения
        fs2.open(argv[2], ios::out);//Второй файл пытаемся открыть для записи
        if(!fs1 || !fs2)
            cout<<"Error of open files\n";
        else
        {
            while(!fs1.eof())
            {
                fs1.getline(str, 256);
                cout<<"Input string> "<<str<<endl;
                if(!(nSymbols = ParseString(str, ':')))
                    cout<<"String not contain \':\'\n";
                else
                {
                    cout<<"String contain : "<<nSymbols<<" \':\'"<<endl
                        <<"Substring> "<<str<<endl;
                    fs2<<str<<endl;
                }
            }
            fs1.close();
            fs2.close();
        }
    }
    system("pause");
    return 0;
}
 
int ParseString(char * str, char symbol)
{
    int i, ifirst = -1,ilast = -1, nSymbols = 0;
    bool bFirst = false;//Флаг что найден первый символ
    for(i = 0; str[i] != '\0' && nSymbols < 2; i++)
    {
        if(str[i] == symbol)
        {
            if((nSymbols++) == 2)//Если нашли 2 символа
                str[i] = '\0'; //подрезаем строку по последнему symbol
            if(!bFirst)
            {
                ifirst = i;//Запоминаем позицию 1-го symbol
                bFirst = true;
            }
        }
    }
    if(nSymbols)
    {
        ilast = i - 1;
        for(i = 0; i < ilast - ifirst; i++)
            str[i] = str[i + ifirst + 1];
        str[ilast - ifirst - 1] = '\0';
    }
    return nSymbols;
}
Проверка онлайн здесь http://codepad.org/DYDnD1xo
input.txt
dhfgdfg: gsdjf : jdsfghfdj
fhgkdf : fg
fdlhjdf kfdjk kjfd
hkg: kfhd : jfdh

output.txt
gsdjf
f
kfhd
Миниатюры
[C++] Дана строка. Получить подстроку расположенную...  
-=ЮрА=-
Заблокирован
Автор FAQ
15.04.2012, 20:03     [C++] Дана строка. Получить подстроку расположенную... #20
Проект API
Миниатюры
[C++] Дана строка. Получить подстроку расположенную...   [C++] Дана строка. Получить подстроку расположенную...   [C++] Дана строка. Получить подстроку расположенную...  

Вложения
Тип файла: rar APIDiagrams.exe.rar (28.7 Кб, 4 просмотров)
Тип файла: txt diag1.txt (85 байт, 5 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2012, 21:44     [C++] Дана строка. Получить подстроку расположенную...
Еще ссылки по теме:
Вывести подстроку, расположенную между первым и вторым пробелом исходной строки C++
Вывести подстроку, расположенную между первым и последним пробелом исходной строки C++
C++ Дана матрица. получить массив b, присвоив его k-му элементу значение 1, если строка упорядочена..
Дана строка вида отдел_фамилия_оклад. Пробелов может быть несколько.Получить из нее название_отдела,оклад C++
C++ Содержит ли строка (string) подстроку

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
17.04.2012, 21:44     [C++] Дана строка. Получить подстроку расположенную... #21
Теперь уже есть поддержка объёмных и круговых диаграмм
Миниатюры
[C++] Дана строка. Получить подстроку расположенную...   [C++] Дана строка. Получить подстроку расположенную...  
Вложения
Тип файла: rar APIDiagrams.exe.rar (35.0 Кб, 2 просмотров)
Yandex
Объявления
17.04.2012, 21:44     [C++] Дана строка. Получить подстроку расположенную...
Ответ Создать тему
Опции темы

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