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

Заменить в строке одно слово на другое, заданное с клавиатуры. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 5.00
trum
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
04.04.2012, 23:05     Заменить в строке одно слово на другое, заданное с клавиатуры. #1
Строка: aa1 bb1 cc1 dd1
слово 1: bb1
слово 2: ff1
решение: aa1 ff1 cc1 dd1


Для начинающего программиста, если можно то программу сделать проще! Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2012, 23:05     Заменить в строке одно слово на другое, заданное с клавиатуры.
Посмотрите здесь:

C++ заменить в строках (содержащих заданное слово) первое слово на другое заданное
C++ Распечатать количество вхождений заданного слова в каждую строку и заменить его на другое заданное слово
Заменить заданное слово в тексте, находящемся в заданном файле, на другое слово. C++
Заменить в строке одно слово на другое, заданное с клавиатуры. C++
C++ Надо исправить программу, пожалуйста. Задание: заменить заданное слово в строке другим заданным словом
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
stanis-morozov
15 / 15 / 1
Регистрация: 18.03.2012
Сообщений: 91
05.04.2012, 15:03     Заменить в строке одно слово на другое, заданное с клавиатуры. #2
Ну а насколько проще? Вы знаете STL? С типом string знакомы?
И какой формат ввода? Как вы представляете себе работу программы?
Так пойдет? Вводится число N. Затем N слов, разделенных пробелами или символами конца строки, затем слово, которое нужно заменить и слово на которое нужно заменить.
То есть вы вводите:
4
aa1 bb1 cc1 dd1
bb1
ff1

А программа вам выводит:
aa1 ff1 cc1 dd1
trum
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
05.04.2012, 17:44  [ТС]     Заменить в строке одно слово на другое, заданное с клавиатуры. #3
нет, только с++
да так пойдет как вы описали
Заранее спасибо за оказанную помощь

Добавлено через 1 минуту
stanis-morozov,
нет, только с++
да так пойдет как вы описали
Заранее спасибо за оказанную помощь
stanis-morozov
15 / 15 / 1
Регистрация: 18.03.2012
Сообщений: 91
05.04.2012, 17:48     Заменить в строке одно слово на другое, заданное с клавиатуры. #4
STL входит в C++
http://ru.wikipedia.org/wiki/%D0%A1%...BD%D0%BE%D0%B2

Сейчас напишу программу)
trum
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
05.04.2012, 17:50  [ТС]     Заменить в строке одно слово на другое, заданное с клавиатуры. #5
Цитата Сообщение от stanis-morozov Посмотреть сообщение
Ну а насколько проще? Вы знаете STL? С типом string знакомы?
И какой формат ввода? Как вы представляете себе работу программы?
Так пойдет? Вводится число N. Затем N слов, разделенных пробелами или символами конца строки, затем слово, которое нужно заменить и слово на которое нужно заменить.
То есть вы вводите:
4
aa1 bb1 cc1 dd1
bb1
ff1

А программа вам выводит:
aa1 ff1 cc1 dd1
с библиотекой string знаком, co стандартными функциями работы со строками, например: strtok,strstr и другие
stanis-morozov
15 / 15 / 1
Регистрация: 18.03.2012
Сообщений: 91
05.04.2012, 17:55     Заменить в строке одно слово на другое, заданное с клавиатуры. #6
Ну вообще STL string это другая библиотека, но я вам написал с обычной Си-шной
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
char strings[1000][100];
char fnd[100];
char replace[100];
 
int main()
{
    int n;
    cin >> n;
 
    for (int i = 0; i < n; i++)
    {
        cin >> strings[i];
    }
    cin >> fnd;
    cin >> replace;
 
    for (int i = 0; i < n; i++)
    {
        if (strcmp(strings[i], fnd) == 0)
        {
            strcpy(strings[i], replace);
        }
    }
 
    for (int i = 0; i < n; i++)
    {
        cout << strings[i] << ' ';
    }
    cout << endl;
    return 0;
}
trum
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
05.04.2012, 17:56  [ТС]     Заменить в строке одно слово на другое, заданное с клавиатуры. #7
а с самим типом string не знаком, строки если можно делать с типом char
спасибо!
stanis-morozov
15 / 15 / 1
Регистрация: 18.03.2012
Сообщений: 91
05.04.2012, 17:57     Заменить в строке одно слово на другое, заданное с клавиатуры. #8
Ну вот я вам с char и сделал)
trum
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
05.04.2012, 18:08  [ТС]     Заменить в строке одно слово на другое, заданное с клавиатуры. #9
Цитата Сообщение от stanis-morozov Посмотреть сообщение
Ну вообще STL string это другая библиотека, но я вам написал с обычной Си-шной
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
char strings[1000][100];
char fnd[100];
char replace[100];
 
int main()
{
    int n;
    cin >> n;
 
    for (int i = 0; i < n; i++)
    {
        cin >> strings[i];
    }
    cin >> fnd;
    cin >> replace;
 
    for (int i = 0; i < n; i++)
    {
        if (strcmp(strings[i], fnd) == 0)
        {
            strcpy(strings[i], replace);
        }
    }
 
    for (int i = 0; i < n; i++)
    {
        cout << strings[i] << ' ';
    }
    cout << endl;
    return 0;
}
Спасибо вам огромное за оказанную помощь!
Для вас я смотрю больщого труда не составило наверное большой опыт программирования! еще раз спасибо!!!


Если у вас есть минута для меня то еще глянуть вот эту задачу?
Определить кол-во слов, входящих в обе заданные строки и составить из них предложение.
Например:
cтрока 1:aa1 bb1 cc1 ss1
строка 2: bb1 aa1 ff1 dd1 ss1
предложение: aa1 bb1 ss1


Добавлено через 1 минуту
И на этом будет все! Лаба в универе просто очень трудная, а по строкам не очень разбираюсь
stanis-morozov
15 / 15 / 1
Регистрация: 18.03.2012
Сообщений: 91
05.04.2012, 18:11     Заменить в строке одно слово на другое, заданное с клавиатуры. #10
А по какому принципу должно составляться предложение?
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
05.04.2012, 18:22     Заменить в строке одно слово на другое, заданное с клавиатуры. #11
Цитата Сообщение от stanis-morozov Посмотреть сообщение
А по какому принципу должно составляться предложение?
думаю, просто запихнуть в строку3 те слова, которые есть и в строке1, и в строке2
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
05.04.2012, 18:24     Заменить в строке одно слово на другое, заданное с клавиатуры. #12
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
#include <conio.h>
#include <stdio.h>
#include <io.h>
#include <stdlib.h>
int main()
{
 
        FILE *f1,*f2;//2 файла
        char nameIn[20];//имя файла1(длина)
        char nameOut[20];//имя файла2(длина)
        char str[100] ;//строка в файле
        int size;//переменная
        printf("Vvedite imy faila: ");   //спрашиваешь имя
        scanf("%s",nameIn);       //считываешь имя
        f1 = fopen(nameIn,"r");//открываем файл 1
        while (f1 == NULL)//цикл от ошибок,если не сущевствует файла1
        {
              printf("\tError!\n");
              printf("Vvedite imy faila: ");   //спрашиваешь имя
              scanf("%s",nameIn);       //считываешь имя
              f1 = fopen(nameIn,"r");//открытие файла1
        }
        size = filelength(fileno(f1));//получаем размер файла
        int readsize = fread(str,sizeof(char),sizeof(char)*size,f1);//читают строку из файла по символам.в переменную readsize записывается размер
        for(int i=0;i<readsize;i++)//цикл замены букв в строке из файла
        {
                        if( str[i] == 'a' && str[i+1] == 'b' && str[i+2] == 'c')//происходит замена букв
                                 {
                                 str[i] = 'd';
                                 str[i+1] = 'e';
                                 str[i+2] = 'f';
                                 }
        }
        printf("Vvedite imy vihodnogo faila: ");   //спрашиваешь имя
        scanf("%s",nameOut);       //считываешь имя
        f2 = fopen(nameOut,"w");//открытие файла2
        printf("\n");
        printf("\tRezultat izmeneniy: \n");
        for(int i=0;i<readsize;i++)//цикл показа результата на экране монитора
        {
                printf("%c",str[i]);
                fprintf(f2,"%c",str[i]);
        }
        fclose(f2);//закрытие файла2
        fclose(f1);//закрытие файла1
getch() ;
}
abc на def можешь свои поставить
stanis-morozov
15 / 15 / 1
Регистрация: 18.03.2012
Сообщений: 91
05.04.2012, 18:31     Заменить в строке одно слово на другое, заданное с клавиатуры. #13
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
char strings1[1000][100];
char strings2[1000][100];
 
int main()
{
    char ch;
    char pr;
    int k = 0, m = 0;
    int p = 0, n = 0;
    cin.sync();
    do
    {
        cin.get(ch);
 
        if (ch == ' ' && pr != ' ')
        {
            k++;
            m = 0;
        }
        else
        {
            strings1[k][m] = ch;
            m++;
        }
 
        pr = ch;
    } while (ch != '\n');
    k++;
 
 
    do
    {
        cin.get(ch);
 
        if (ch == ' ' && pr != ' ')
        {
            p++;
            n = 0;
        }
        else
        {
            strings2[p][n] = ch;
            n++;
        }
 
        pr = ch;
    } while (ch != '\n');
    p++;
 
    cout << "In the first line " << k << " words" << endl;
    cout << "In the second line " << p << " words" << endl;
 
    for (int i = 0; i < k; i++)
    {
        for (int j = 0; j < p; j++)
        {
            if (strcmp(strings1[i], strings2[j]) == 0)
            {
                cout << strings1[i] << ' ';
            }
        }
    }
    cout << endl;
    return 0;
}
У меня такой код получился)
trum
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
05.04.2012, 18:44  [ТС]     Заменить в строке одно слово на другое, заданное с клавиатуры. #14
да в строку три закидывать повторяющиеся слова и программу сделать без файлов

Добавлено через 7 минут
и желательно без функций например get, можно использовать стандартные например strtok, strlen, strstr и другие

Добавлено через 2 минуты
stanis-morozov,
а зачем двумерный массив символов создавать? Объясните пожалуйста?
stanis-morozov
15 / 15 / 1
Регистрация: 18.03.2012
Сообщений: 91
05.04.2012, 18:47     Заменить в строке одно слово на другое, заданное с клавиатуры. #15
Если без get(), то с scanf()

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
#include <cstdio>
#include <cstring>
 
using namespace std;
 
char strings1[1000][100];
char strings2[1000][100];
 
int main()
{
    char ch;
    char pr;
    int k = 0, m = 0;
    int p = 0, n = 0;
    do
    {
        scanf("%c", &ch);
 
        if (ch == ' ' && pr != ' ')
        {
            k++;
            m = 0;
        }
        else
        {
            strings1[k][m] = ch;
            m++;
        }
 
        pr = ch;
    } while (ch != '\n');
    k++;
 
 
    do
    {
        scanf("%c", &ch);
 
        if (ch == ' ' && pr != ' ')
        {
            p++;
            n = 0;
        }
        else
        {
            strings2[p][n] = ch;
            n++;
        }
 
        pr = ch;
    } while (ch != '\n');
    p++;
 
    printf("In the first line %d words\n", k);
    printf("In the second line %d words\n", p);
 
    for (int i = 0; i < k; i++)
    {
        for (int j = 0; j < p; j++)
        {
            if (strcmp(strings1[i], strings2[j]) == 0)
            {
                printf("%s ", strings1[i]);
            }
        }
    }
    printf("\n");
    return 0;
}
Двумерный массив нужен, т.к. каждая строка - это массив char-ов. А нам для удобства поиска нужен массив строк. Тогда нам нужен "массив массивов" или двумерный массив.
Первый индекс в этом массиве - номер строки, второй индекс - номер символа в строке.
trum
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
05.04.2012, 18:58  [ТС]     Заменить в строке одно слово на другое, заданное с клавиатуры. #16
stanis-morozov,
спасибо. И еще маленький вопрос для чего библиотека нужна cstring?

Добавлено через 1 минуту
или о аналог сишной библиотеки string.h?
stanis-morozov
15 / 15 / 1
Регистрация: 18.03.2012
Сообщений: 91
05.04.2012, 19:00     Заменить в строке одно слово на другое, заданное с клавиатуры. #17
Библиотека cstring - это та самая библиотека string, про которую вы говорили. Просто в чистом С была библиотека string, а когда был создан C++, то была создана еще одна библиотека с классом string, про которую я и говорил (STL). И чтобы различать эти библиотеки, старую Си-шную назвали сstring. А в этой программе она нужна для функции strcmp(), сравнивающей строки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 19:03     Заменить в строке одно слово на другое, заданное с клавиатуры.
Еще ссылки по теме:

C++ Определить номера строк матрицы, содержащих хотя бы одно заданное значение, и умножить их на другое
C++ Заменить в тексте одно слово на другое
Заменить выбранное вами слово на другое слово C++

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

Или воспользуйтесь поиском по форуму:
trum
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
05.04.2012, 19:03  [ТС]     Заменить в строке одно слово на другое, заданное с клавиатуры. #18
stanis-morozov,
понятно. Огромное вам спасибо за помощь!
Yandex
Объявления
05.04.2012, 19:03     Заменить в строке одно слово на другое, заданное с клавиатуры.
Ответ Создать тему
Опции темы

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