Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 5.00
trum
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
#1

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

04.04.2012, 23:05. Просмотров 3567. Ответов 17
Метки нет (Все метки)

Строка: aa1 bb1 cc1 dd1
слово 1: bb1
слово 2: ff1
решение: aa1 ff1 cc1 dd1


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

Заменить в строке одно слово на другое, заданное с клавиатуры. - C++
Условие задачи: Заменить в строке одно слово на другое, заданное с клавиатуры. Текст программы: #include<conio.h> ...

Заменить заданное слово в тексте, находящемся в заданном файле, на другое слово. - C++
Заменить заданное слово в тексте, находящемся в заданном файле, на другое слово.

Заменить в тексте одно слово на другое - C++
в текстовом файле содержащий код программы на языке С, заменить все вхождения одного заданного пользователем идентификатора на другой

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

Если заданное слово встречается в строке, заменить его звездочкой - C++
добый день. есть задача. ввести строку, задать слово, и если это слово встречается в строке, заменить звездочкой. #include "stdafx.h" ...

Надо исправить программу, пожалуйста. Задание: заменить заданное слово в строке другим заданным словом - C++
Задание: заменить заданное слово в строке другим заданным словом Вот какие баги, если можно так выразиться, я нашёл: 1. Программа...

17
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
0
trum
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
05.04.2012, 17:44  [ТС] #3
нет, только с++
да так пойдет как вы описали
Заранее спасибо за оказанную помощь

Добавлено через 1 минуту
stanis-morozov,
нет, только с++
да так пойдет как вы описали
Заранее спасибо за оказанную помощь
0
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

Сейчас напишу программу)
0
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 и другие
0
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;
}
0
trum
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
05.04.2012, 17:56  [ТС] #7
а с самим типом string не знаком, строки если можно делать с типом char
спасибо!
0
stanis-morozov
15 / 15 / 1
Регистрация: 18.03.2012
Сообщений: 91
05.04.2012, 17:57 #8
Ну вот я вам с char и сделал)
0
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 минуту
И на этом будет все! Лаба в универе просто очень трудная, а по строкам не очень разбираюсь
0
stanis-morozov
15 / 15 / 1
Регистрация: 18.03.2012
Сообщений: 91
05.04.2012, 18:11 #10
А по какому принципу должно составляться предложение?
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
05.04.2012, 18:22 #11
Цитата Сообщение от stanis-morozov Посмотреть сообщение
А по какому принципу должно составляться предложение?
думаю, просто запихнуть в строку3 те слова, которые есть и в строке1, и в строке2
0
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 531
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 можешь свои поставить
0
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;
}
У меня такой код получился)
0
trum
0 / 0 / 0
Регистрация: 20.03.2012
Сообщений: 53
05.04.2012, 18:44  [ТС] #14
да в строку три закидывать повторяющиеся слова и программу сделать без файлов

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

Добавлено через 2 минуты
stanis-morozov,
а зачем двумерный массив символов создавать? Объясните пожалуйста?
0
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-ов. А нам для удобства поиска нужен массив строк. Тогда нам нужен "массив массивов" или двумерный массив.
Первый индекс в этом массиве - номер строки, второй индекс - номер символа в строке.
1
05.04.2012, 18:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 18:47
Привет! Вот еще темы с ответами:

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

Заменить в тексте одно словосочетание на другое - C++
Здравствуйте,помогите пожалуйста сделать программу которая в любом (не имеет значения в каком тексте) будет меня например словосочетание...

Заменить выбранное вами слово на другое слово - C++
Здравствуйте! Прошу помочь разобраться с ошибками. #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;string.h&gt; using namespace...

Можно ли из букв, входящих в одно слово, составить другое - C++
Даны два слова. Составить программу проверки, можно ли из букв, входящих в одно слово, составить другое (каждая буква используется только...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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