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

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

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

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

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

Помогите код дописать пожалуйста в лабе,.. нужно еще одно что бы условие выполнялось, нужно, чтобы имя файла, из которого читается строка, и имя файла, в который записывается, вводились из командной строки.
Сама программа работает но нужно еще подшаманить немного над ней.
Миниатюры
[C++] Дана строка. Получить подстроку расположенную...  
Вложения
Тип файла: zip Lab2.zip (853.2 Кб, 10 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2012, 21:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос [C++] Дана строка. Получить подстроку расположенную... (C++):

Дана строка S. Необходимо получить подстроку, расположенную между первым и последним пробелом исходной строки - C++
Пожалуйста, помогите разобраться! Дана строка S. Необходимо получить подстроку, расположенную между первым и последним пробелом исходной...

Необходимо получить подстроку, расположенную между первым и последним пробелом исходной строки - C++
помогите пожалуйста!!! Дана строка S. Необходимо получить подстроку, расположенную между первым и последним пробелом исходной строки....

Дана строка и подстрока; вставить подстроку после каждого вхождения 'AB' в строке - C++
товарищи, помогите кто чем может.. голова кипит.. либо я что то не так делаю либо да.. вобщем написал фиг пойми чего и хочу что бы оно...

Дана строка. Удалить из нее самую длинную подстроку, что состоит из цифр - C++
Дана строка.Удалить из нее самую длинную подстроку , что состоит из цифр. Блин я недавно изучаю строки, вот что я написал..... ...

Дана строка, состоящая из букв, цифр, запятых, точек, знаков «+» и «–». Выделить подстроку, которая соответствует записи целого числа. - C++
#include <iostream.h> #include <string.h> int main() { char st,st2; int i,j; cout << "Vvedite stroku"; cin >> st; ...

Дана строка символов, состоящая из букв, цифр, запятых, точек, знаков «+» и «–». Выделить подстроку, которая соответствует записи вещественного числа - C++
Дана строка символов, состоящая из букв, цифр, запятых, точек, знаков «+» и «–». Выделить подстроку, которая соответствует записи...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dimakaz5194
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 40
08.03.2012, 22:28  [ТС] #2
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
#include <cstdlib>
#include <iostream>
 
int Stroka(char a[], char b[]);
int ReadStroka(char const *fname, char a[256]);
int SaveStroka(char const *fname, char a[256]);
 
int main(int argc, char *argv[])
{
    char a[256],b[256];
    ReadStroka("Lab2.txt",a);
    printf("%s\n",a);
    Stroka(a,b);
    SaveStroka("Lab2.1.txt",b);
    printf("%s\n",b);
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
int Stroka(char a[], char b[])
{
     int f=0;int j=0;
     for(int i=0;a[i];i++)
     {
             if(a[i]==':') 
             for(i++;a[i]!=':'&&a[i];i++) b[j++]=a[i];
             else continue;
             b[j]='\0';
             return 1;
             break;
     }
     b[j]='\0';
     return 0;
}
int ReadStroka(char const *fname, char a[256])
{
    FILE *f=fopen(fname,"r");
    int n;
    if(f==NULL)
    {
        return 0;
    }
    fgets(a,256,f);
    fclose(f);
}
 
int SaveStroka(char const *fname, char a[256])
{
    FILE *f=fopen(fname,"w");
    if(f==NULL)
    {
        return 0;
    }
    fprintf(f,"%s",a);
    fclose(f);
}
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
08.03.2012, 22:32 #3
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
char* findstring(char *str)
{
    char *first = 0;
    int len = strlen(str);
    for (int i = 0; i < len; i++)
    {
        if (str[i] == ';')
        {
            if(!first)
            {
                first = &str[i] + 1;
            }
            
            else
            {
                str[i] = '\0';
                break;
            }
        }
    }
 
    if (!first)
    {
        return "Такая строка не найдена\n";
    }
 
    return first;
}
A555
51 / 51 / 2
Регистрация: 04.04.2011
Сообщений: 209
08.03.2012, 22:38 #4
Если я правильно понял что ты хочешь то вот здесь поймёшь)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
int main()
{
     FILE *file1,*file2;
     char path1[10],path2[10];
     cin >> path1 >> path2;
     strcat(path1,".txt");
     strcat(path2,".txt");
     file1 = fopen(path1,"a+");
     file2 = fopen(path2,"a+");
     return EXIT_SUCCESS;
}
dimakaz5194
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 40
08.03.2012, 23:21  [ТС] #5
Блин, там получается что два файла создаются заново,.. а нельзя допустим так сделать что бы: написать имя файла - файл первый из которого читается создался.. потом через командную строку ввести туда строку,,. она запишется в файл, и написать имя файла который создастся, программа закроется и в нем уже будет нужная часть строки когда откроешь файл?... думал еще что бы вручную первый файл создавать и записывать но надо что бы все через командную строку.
A555
51 / 51 / 2
Регистрация: 04.04.2011
Сообщений: 209
08.03.2012, 23:24 #6
там где тип открытия убери + будет просто а(если файл есть то он его откроет если нету то создаст)
C++
1
2
file1 = fopen(path1,"a");
     file2 = fopen(path2,"a");
так ты можешь сделать тип открытия какой захочешь вот ссылка незнаю можно ли здесь кидать ссылки на посторонние ресурсы но там поймёшь http://devoid.com.ua/functions-about...ons/fopen.html
dimakaz5194
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 40
09.03.2012, 00:16  [ТС] #7
Попытался реализовать идею ошибка на инт лезет постоянно
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 <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
int main()
int Stroka(char a[], char b[]);
int ReadStroka(char const *fname, char a[256]);
int SaveStroka(char const *fname, char a[256]);
{
    FILE *file1,*file2;
     char path1[10],path2[10];
     cin >> path1 >> path2;
     strcat(path1,".txt");
     strcat(path2,".txt");
     file1 = fopen(path1,"a+");
     file2 = fopen(path2,"a+");
     }
     
     int main(int argc, char *argv[])
{
     char a[256],b[256];
     ReadStroka(path1,".txt",a);
     printf("%s\n",a);
     Stroka(a,b);
     SaveStroka(path2,".txt",b);
     printf("%s\n",b);
     system("PAUSE");
     return EXIT_SUCCESS;
     }
 
 
 
int Stroka(char a[], char b[])
{
     int f=0;int j=0;
     for(int i=0;a[i];i++)
     {
             if(a[i]==':') 
             for(i++;a[i]!=':'&&a[i];i++) b[j++]=a[i];
             else continue;
             b[j]='\0';
             return 1;
             break;
     }
     b[j]='\0';
     return 0;
}
int ReadStroka(char const *fname, char a[256])
{
    FILE *f=fopen(fname,"r");
    int n;
    if(f==NULL)
    {
        return 0;
    }
    fgets(a,256,f);
    fclose(f);
}
 
int SaveStroka(char const *fname, char a[256])
{
    FILE *f=fopen(fname,"w");
    if(f==NULL)
    {
        return 0;
    }
    fprintf(f,"%s",a);
    fclose(f);
}
Добавлено через 30 минут
Вот код такой же лабы только там без файлов выводится и вводится все с командной строке,.. помогите пожалуйста соединить это все с общим кодом а то я вообще уже запутался напроч(((, .. что бы 1)написал имя файла-файл создался 2)написал строку с двоеточиями как по заданию там нажал ентер 3)написал имя второго файла - файл создался и в него как по заданию прочиталась та строка из первого файла и нужное из нее записалось во второй файл.
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
#include <cstdlib>
#include <iostream>
 
int Stroka(char a[], char b[]);
 
int main(int argc, char *argv[])
{
    char a[256],b[256];
    printf("Vveite stroku: ");
    scanf("%s",&a);
    if(Stroka(a,b)) printf("%s\n",b);
    else printf("V stroke net dvoetochiya\n");
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
int Stroka(char a[], char b[])
{
     int f=0;int j=0;
     for(int i=0;a[i];i++)
     {
             if(a[i]==':') 
             for(i++;a[i]!=':';i++) b[j++]=a[i];
             else continue;
             b[j]='\0';
             return 1;
             break;
     }
     b[j]='\0';
     return 0;
}
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
09.03.2012, 01:43 #8
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
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
char* findstring(char *str);
 
int main()
{
    setlocale(LC_ALL, "");
    char buf[256];
    char filename1[50], filename2[50];
    fstream fs, sc;
 
    _flushall();
    cout << "\nВведите строку текста: " << endl;
    cin.getline(buf, sizeof(buf));
 
    _flushall();
    cout << "Введите имя файла: ";
    cin >> filename1;
    strncat(filename1, ".txt", 5);
    fs.open(filename1, ios::out);
    fs << buf;
 
    _flushall();
    cout << "Введите имя файла: ";
    cin >> filename2;
    strncat(filename2, ".txt", 5);
    sc.open(filename2, ios::out);
    sc << findstring(buf);
 
 
    return EXIT_SUCCESS;
}
 
char* findstring(char *str)
{
        char *first = 0;
        int len = strlen(str);
        for (int i = 0; i < len; i++)
        {
                if (str[i] == ';')
                {
                        if(!first)
                        {
                                first = &str[i] + 1;
                        }
                        
                        else
                        {
                                str[i] = '\0';
                                break;
                        }
                }
        }
 
        if (!first)
        {
                return "Такая строка не найдена\n";
        }
 
        return first;
}
dimakaz5194
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 40
09.03.2012, 10:37  [ТС] #9
Ох, огромное спасибо !!
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
09.03.2012, 10:58 #10
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
#include <iostream>
#include <string>
 
int main()
{
    std::string str;
    std::getline( std::cin, str );
    
    int first = str.find(':');
    
    if ( first == (int) std::string::npos )
    {
        std::cout << "There are no semicolon" << std::endl;
        return 0;
    }
    
    int second = str.find( ':', first + 1 );
    
    if ( second == (int) std::string::npos )
    {
        std::cout << str.substr( first + 1, str.length() - first ) << std::endl;
        return 0;
    }
    
    std::cout << str.substr( first + 1, second - first - 1 ) << std::endl;
}
dimakaz5194
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 40
09.03.2012, 14:00  [ТС] #11
А как изменить что бы вручную создать txt в него ввести строку с двоеточиями, сохранить... а через cmd вести имя файла из которого читать будет (то есть ранее созданного) и имя файла который создастся с нужной частью строки?
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
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
char* findstring(char *str);
 
int main()
{
        setlocale(LC_ALL, "");
        char buf[256];
        char filename1[50], filename2[50];
        fstream fs, sc;
 
        _flushall();
        cout << "\nВведите строку текста: " << endl;
        cin.getline(buf, sizeof(buf));
 
        _flushall();
        cout << "Введите имя файла: ";
        cin >> filename1;
        strncat(filename1, ".txt", 5);
        fs.open(filename1, ios::out);
        fs << buf;
 
        _flushall();
        cout << "Введите имя файла: ";
        cin >> filename2;
        strncat(filename2, ".txt", 5);
        sc.open(filename2, ios::out);
        sc << findstring(buf);
 
 
        return EXIT_SUCCESS;
}
 
char* findstring(char *str)
{
        char *first = 0;
        int len = strlen(str);
        for (int i = 0; i < len; i++)
        {
                if (str[i] == ';')
                {
                        if(!first)
                        {
                                first = &str[i] + 1;
                        }
                        
                        else
                        {
                                str[i] = '\0';
                                break;
                        }
                }
        }
 
        if (!first)
        {
                return "Такая строка не найдена\n";
        }
 
        return first;
}
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
09.03.2012, 14:07 #12
всмысле вручную? имя файла читай из массива аргументов argv
dimakaz5194
0 / 0 / 0
Регистрация: 02.11.2011
Сообщений: 40
09.03.2012, 14:15  [ТС] #13
Вручную в смысле создать текстовый файл который прога будет читать в папке с программой задать ему имя
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
09.03.2012, 15:25 #14
добавь в open ios::nocreate и тогда он будет открывать файл, если его нету ругаться
-=ЮрА=-
Заблокирован
Автор FAQ
10.03.2012, 01:48 #15
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
76
77
78
79
80
#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];
    fstream fs1, fs2;
    if(argc < 3)//Если не передали аргументами пути к файлам
        //извещаем об этом и выходим
        cout<<"Not enough arguments!\n";
    else
    {
        if(AccessToFile(fs1, argv[1], ios::in))//Первый файл пытаемся открыть для чтения
        if(AccessToFile(fs2, argv[2], 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;
}
Содержание файлов
input.txt This is : the some test
output.txt the some test
Миниатюры
[C++] Дана строка. Получить подстроку расположенную...  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2012, 01:48
Привет! Вот еще темы с ответами:

Вывести подстроку, расположенную между первым и вторым пробелом исходной строки - C++
Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и вторым пробелом исходной...

Вывести подстроку, расположенную между первым и вторым пробелом исходной строки - C++
Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и вторым пробелом исходной...

Вывести подстроку, расположенную между первым и последним пробелом исходной строки - C++
Дана строка, содержащая по крайней мере один символ пробела. Вывести подстроку, расположенную между первым и последним пробелом исходной...

Дана матрица. получить массив b, присвоив его k-му элементу значение 1, если строка упорядочена.. - C++
Дана матрица. получить массив b, присвоив его k-му элементу значение 1, если строка упорядочена по убыванию и 0 - в противном случае. Вот...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.03.2012, 01:48
Ответ Создать тему
Опции темы

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