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

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

Войти
Регистрация
Восстановить пароль
 
 
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 77
#1

Вставить слово в определенную позицию в тексте - C++

23.11.2014, 22:31. Просмотров 1015. Ответов 28
Метки нет (Все метки)

Организовать ввод эталонного слова и предложения (слова разделяются пробелом(пробелами)). По выбору пользователя вставить эталонное слово а)в конец предложения; б)в начало предложения; в)после слова N (вводится пользователем).

Требования на картинке ниже)

Помогите организовать функции)

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
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
void func1(char *pred, char *etalon)
{
}
 
void func2(char*pred, char*etalon)
{
}
 
void func3(char*pred, char*etalon, char*slovo)
{
}
 
void main()
{ 
  setlocale(LC_ALL, "Russian");
  char *pred[100];
  char *etalon[100];
  char *slovo[100];
  int a;
  while(1)//возможность многократного выполнения алгоритма 
{
  cout << "Введите предложение на транслите: " << endl;
  cin.getline(pred,100);
  cout << "Введите слово эталон:" << endl;
  cin >> etalon;
  cout << "Куда вставить слово эталон:" << endl;
  cout << "1) в конец предложения; " << endl;
  cout << "2) в начало предложения; " << endl;
  cout << "3) после слова N: " << endl;
  cin >> a;
 
   if (a==1)
      func1(pred, etalon,dlina);
   if (a==2)
      func2(pred, etalon);
   if (a==3)
     {cout << "Введите слово после которого хотите вставить слово еталон: " << endl;
     cin >> slovo;
     func3(pred, etalon, slovo);}
   if (a==0)
     {break;}
 }
  system("pause");
}
0
Миниатюры
Вставить слово в определенную позицию в тексте  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2014, 22:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вставить слово в определенную позицию в тексте (C++):

Вставить заданное число в определенную позицию массива - C++
Вставить заданное число в массив целых чисел: a)перед всеми элементами, кратными числу A; б)после всех отрицательных элементов. Каким...

Вставить слово в указанную позицию во все строки массива - C++
У меня есть массив string, который заполняет пользователь. После того как массив заполнен нужно вставить дополнительное слово во все...

В любом тексте между 3 и 4 словом вставить новое слово - C++
Ребят,помогите пожалуйста,в работе со строками совсем не шарю. Задание:в любом тексте между 3 и 4 словом вставить новое слово(работать с...

В произвольном тексте вставить между вторым и третьим словом новое слово - C++
&quot;В произвольном тексте вставить между вторым и третьим словом новое слово.&quot; Помоги пожалуйста)) С коментариями если можно для...

Ifstream переход в определенную позицию - C++
Смотрите я прочитал файл и хочу перейти в определенную позицию, в которой был раньше. Как запомнить ту позицию и перейти в нее?

Запись в файл в определенную позицию - C++
Такая проблема. Открываю файл записываю нули туда. Как в определенную позицию вместо нулей вставить значение? Ничего не получается. Файл...

28
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 01:34 #16
В листинге программы, что вы скинули я тоже не знаю что там написано в функции. Скорее всего это не вся программа. Смотрите мое решение.
0
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 77
24.11.2014, 10:37  [ТС] #17
ssergius, доброе утро, не могли бы вы рассказать как вы это сделали?
Цитата Сообщение от ssergius Посмотреть сообщение
void func3(char* pred, char* etalon, char* slovo)
{
* * int i = 0, k = 0;
* * int len;
* * char tempvar[50];
len = strlen(slovo);
while (i < strlen(pred)) {
if (pred[i] == slovo[k] && k < len)
* * * * * * k++;
* * * * else if (k == len && pred[i++] == ' ')
* * * * * * break;
* * * * else
* * * * * * k = 0;
i++;
* * }
k = 0;
* * int s = i;
* * while (s < strlen(pred)) {
* * * * tempvar[k] = pred[s];
* * * * k++;
* * * * s++;
* * }
pred[i] = '\0';
* * tempvar[k] = '\0';
strcat(etalon, " ");
* * strcat(pred, etalon);
* * strcat(pred, tempvar);
cout << "Text: " << pred << endl;
}
0
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 10:47 #18
Доброе утро,
Strlen (slovo) определяет количество символов в слове. Требуется для прохождения цикла.. Далее создаём цикл который будет работать до тех пор, пока не проаерим каждую букву в предложении.
if (pred[i] == slovo[k] && k < len) условие сравнивает символ предложения с символом слова, после которого надо вставить, если совпадает, то увеличиваем К, если нет то К обнуляется.

Спрашивайте что не ясно. Кстати, я точно не знаю как поведет себя программа если заданного слова не найдёт в строке, проверьте

Добавлено через 4 минуты
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
void func3(char* pred, char* etalon, char* slovo)
{
* * int i = 0, k = 0;
* * int len;
* * char tempvar[50];
len = strlen(slovo);
while (i < strlen(pred)) {
if (pred[i] == slovo[k] && k < len) 
* * * * * * k++;
* * * * else if (k == len && pred[i++] == ' ') 
* * * * * * break;
* * * * else 
* * * * * * k = 0;
i++;
* * }
k = 0; 
* * int s = i;
* * while (s < strlen(pred)) {
* * * * tempvar[k] = pred[s]; //записываемм вторую часть предложения во временную переменную
* * * * k++;
* * * * s++;
* * }
pred[i] = '\0';//начиная с i-го символа в предложении заполняем всю правую часть пустотой(правая часть уже скопирована в tempvar)
* * tempvar[k] = '\0';//тоже самое делаем и тут, иначе во второй части предложения, которую мы скопировал в цикле ранее запишется мусор
strcat(etalon, " ");//эти строки думаю понятны. Идёт обьединение строк
* * strcat(pred, etalon);
* * strcat(pred, tempvar);
cout << "Text: " << pred << endl;
}
0
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 77
24.11.2014, 10:52  [ТС] #19
ssergius, и у вас цикл нормально работает?
C++
1
2
 while(1)//возможность многократного выполнения алгоритма 
{
0
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 10:54 #20
While (1) я не тестировал у себя, проверял только свои функции. While(1) будет всегда true, тут требуется преждевременной выход из тела цикла: break;
0
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 77
24.11.2014, 11:02  [ТС] #21
ssergius, это все организовано, все вроде правильно должно работать
но
C++
1
char pred[100];
неправильно выводится
если я запишу так:
C++
1
2
cout << "Введите предложение на транслите: " << endl;
  cin.getline(pred,99);
то не срабатывает func3() и когда идет следующий запрос, то все начинается не с запроса предложения, а сразу свова еталон
Если я ввиду так:
C++
1
2
cout << "Введите предложение на транслите: " << endl;
  cin >> pred;
то если я ввожу больше одного слова при запросе ввести предложение, начинается бесконечный цикл вывада, в общем что-то страшное выбивает
0
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 11:51 #22
Попробуйте после ввода слова предложений вставить cin.clear();
0
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 77
24.11.2014, 12:12  [ТС] #23
ssergius, не получается
у меня просто что-то с программой скорее всего
0
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 12:18 #24
Вставьте ещё тогда cin.sync();
Скиньте код сюда, гляну как вставили
0
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 77
24.11.2014, 12:51  [ТС] #25
ssergius, тогда сразу плдмкажите после какой строчки нужно)
0
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 12:58 #26
Там где у вас идёт,после него cin >> blablabla; cin.clear(); cin.sync();
0
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 77
24.11.2014, 15:18  [ТС] #27
ssergius, ещё одна проблема, нигде не использовался указатель

Добавлено через 44 минуты
ssergius,
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
81
82
83
84
85
86
87
88
89
90
#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
 
#include <iostream>
 
using namespace std;
 
void func1(char *pred, char *etalon)
{
    // операция конкатенции, объединение строк
    strcat_s(pred, 50, " "); // скопировать пробел после предложения
    strcat_s(pred, 50, etalon); //скопировать слово эталон перед предложением
    cout << "Text: " << pred << endl; 
}
 
void func2(char*pred, char*etalon)
{
    strcat_s(etalon, 50, " ");//скопировать пробел после слова эталона
    strcat_s(etalon, 50, pred);
    cout << "Text: " << etalon << endl;
}
 
void func3(char* pred, char* etalon, char* slovo)
{
    int i = 0, k = 0;
    int len;
    char tempvar[50];
 
    len = strlen(slovo);// количество символов в слове
    while (i < strlen(pred))//проверяет каждую букву в предложении
    {
        if (pred[i] == slovo[k] && k < len) /*условие сравнивает символ предложения с символом слова, после которого надо вставить, 
            если совпадает, то увеличиваем К, если нет то К обнуляется.*/
            k++;
        else if (k == len && pred[i++] == ' ') 
            break;
        else 
            k = 0;
        i++;
    }
    k = 0; 
    int s = i;
    while (s < strlen(pred)) 
    {
        tempvar[k] = pred[s];//записываемм вторую часть предложения во временную переменную
        k++;
        s++;
    }
    pred[i] = '\0';//начиная с i-го символа в предложении заполняем всю правую часть пустотой(правая часть уже скопирована в tempvar)
    tempvar[k] = '\0';//тоже самое делаем и тут, иначе во второй части предложения, которую мы скопировал в цикле ранее запишется мусор
    strcat_s(etalon, 50, " ");//скопировать пробел после слова эталона, идёт обьединение строк
    strcat_s(etalon, 50, pred);
    strcat_s(pred, 50, tempvar);
    cout << "Text: " << pred << endl;
}
 
void main()
{ 
  setlocale(LC_ALL, "Russian");
  char pred[100];
  char etalon[100];
  char slovo[100];
  int a;
  while(1)//возможность многократного выполнения алгоритма 
{
  cout << "Введите предложение на транслите: " << endl;
  cin >> pred;
  cin.clear(); 
  cin.sync();
  cout << "Введите слово эталон:" << endl;
  cin >> etalon;
  cout << "Куда вставить слово эталон:" << endl;
  cout << "1) в конец предложения; " << endl;
  cout << "2) в начало предложения; " << endl;
  cout << "3) после слова N: " << endl;
  cin >> a;
 
   if (a==1)
      func1(pred, etalon);
   if (a==2)
      func2(pred, etalon);
   if (a==3)
     {cout << "Введите слово после которого хотите вставить слово еталон: " << endl;
     cin >> slovo;
     func3(pred, etalon, slovo);}
   if (a==0)
     {break;}
 }
  system("pause");
}
0
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 16:15 #28
Для чего нужен указатель в вашей проге?
0
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 77
24.11.2014, 16:46  [ТС] #29
ssergius, для динамического массива.
Преподователь уточнил, что нужно использовать указатель в самой программе.
Если Вам не сложно помочь мне, буду очень рада. Но если Вас уже достала эта программа, то спасибо за то что мне помогли в этом. Есть хоть от чего отбиваться дальше)
0
24.11.2014, 16:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2014, 16:46
Привет! Вот еще темы с ответами:

Чтение/запись в файл на определенную позицию - C++
Как в файле узнать , есть ли на том месте куда я хочу записать новое число, какое либо еще число? и если есть, занести следующее число...

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

Найти в файле слово по заданному началу, вывести слово и его позицию - C++
Найти в файле слово по заданному началу, вывести слово и его позицию

Написать функцию добавления значения в определенную позицию списка, заданную пользователем - C++
class.h #include&lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; class LinkedList { private: struct Elem


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

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

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