Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
1 / 1 / 1
Регистрация: 08.09.2014
Сообщений: 77
1

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

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

Author24 — интернет-сервис помощи студентам
Организовать ввод эталонного слова и предложения (слова разделяются пробелом(пробелами)). По выбору пользователя вставить эталонное слово а)в конец предложения; б)в начало предложения; в)после слова 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2014, 22:31
Ответы с готовыми решениями:

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

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

Вставить заданое слово перед заданим словом в тексте
Помогите нужно срочно переделать програму есть програма &quot;Удалить слово перед заданым словом в...

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

28
Mr_Progger
23.11.2014, 22:39
  #2

Не по теме:


Первое требование наверно "большой специалист" придумал

0
6 / 6 / 5
Регистрация: 10.03.2013
Сообщений: 48
23.11.2014, 23:44 3
1) в конец предложения;

C++
1
2
strcat(pred, " ");
strcat(pred, etalon);
2) в начало предложения;

C++
1
2
strcat(etalon, " ");
strcat(etalon, pred);
попробуйте так)
0
1 / 1 / 1
Регистрация: 08.09.2014
Сообщений: 77
23.11.2014, 23:49  [ТС] 4
ssergius, для начала у меня проблема в переменных, где-то массив, а где-то через указатель, каша получилась и я запуталась
0
6 / 6 / 5
Регистрация: 10.03.2013
Сообщений: 48
23.11.2014, 23:57 5
Написал для 1 функции.


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
// TestShlak.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
void func1(char *pred, char *etalon)
{
    strcat(pred, " ");
    strcat(pred, etalon);
    cout << "Text: " << pred << endl;
}
 
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);
   if (a==2)
      func2(pred, etalon);
   if (a==3)
     {cout << "Введите слово после которого хотите вставить слово еталон: " << endl;
     cin >> slovo;
     func3(pred, etalon, slovo);}
   if (a==0)
     {break;}
 }
  system("pause");
}
Миниатюры
Вставить слово в определенную позицию в тексте  
1
6 / 6 / 5
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 00:03 6
C++
1
2
3
4
5
6
7
void func2(char*pred, char*etalon)
{
 
    strcat(etalon, " ");
    strcat(etalon, pred);
    cout << "Text: " << etalon << endl;
}
Вторая функция
Миниатюры
Вставить слово в определенную позицию в тексте  
1
1 / 1 / 1
Регистрация: 08.09.2014
Сообщений: 77
24.11.2014, 00:24  [ТС] 7
ssergius, спасибо

Добавлено через 6 минут
ssergius, у вас не было подобной ошибки?
Ошибка 1 error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

я вставляла #define _CRT_SECURE_NO_WARNINGS, не срабатывает
0
6 / 6 / 5
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 00:30 8
Alt+F7
Миниатюры
Вставить слово в определенную позицию в тексте  
0
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 2
24.11.2014, 00:32 9
либо вместо функции 'strcat' напиши 'strcat_s'.
0
1 / 1 / 1
Регистрация: 08.09.2014
Сообщений: 77
24.11.2014, 00:39  [ТС] 10
ssergius, где это найти? в студии 2012

Добавлено через 1 минуту
Valeriy147, та так и сделала)
вот только теперь проблема в том, что цикл работает не правильно
запрос начинается не с предложения, а слова

Добавлено через 1 минуту
Valeriy147, исправла

Добавлено через 2 минуты
Цитата Сообщение от Yana_Chernobay Посмотреть сообщение
cout << "3) после слова N: " << endl;
подскажите что с этим можно сделать?
0
6 / 6 / 5
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 00:46 11
Alt+F7 не вызывает окно?
Странно. в Visual Studio 2012 сам работаю. Попробуйте еще раз. Штука эта будет постоянно всплывать у вас.
0
1 / 1 / 1
Регистрация: 08.09.2014
Сообщений: 77
24.11.2014, 00:49  [ТС] 12
C++
1
2
3
4
5
6
7
8
9
void func3(char*pred, char*etalon, char*slovo)
{
    string::size_type pos = pred.find(slovo);
    if (pos == string::npos)
        cout << "No such word in string" << endl;
    else
        pred.insert(++pos, etalon);
    cout << "Text:" << pred << endl;
}
нашла в интернете, но подчеркивает переменную pred
0
6 / 6 / 5
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 00:51 13
скиньте весь листинг программы
0
1 / 1 / 1
Регистрация: 08.09.2014
Сообщений: 77
24.11.2014, 00:53  [ТС] 14
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
#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
 
#include <iostream>
#include <cstring>
 
using namespace std;
 
void func1(char *pred, char *etalon)
{
    strcat_s(pred, 50, " ");
    strcat_s(pred, 50, etalon);
    cout << "Text: " << pred << endl;
    strcat_s(pred, 50, " ");
    strcat_s(pred, 50 , etalon);
}
 
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)
{
    string::size_type pos = pred.find(slovo);
    if (pos == string::npos)
        cout << "No such word in string" << endl;
    else
        pred.insert(++pos, etalon);
    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;
  cout << "Введите слово эталон:" << endl;
  cin >> etalon;
  cout << "Куда вставить слово эталон:" << endl;
  cout << "1) в конец предложения; " << endl;
  cout << "2) в начало предложения; " << endl;
  cout << "3) после слова N: " << endl;
  cout << "0) выход " << 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
6 / 6 / 5
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 01:33 15
Готовая прога.

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
91
92
93
94
95
96
97
// TestShlak.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
void func1(char *pred, char *etalon)
{
    strcat(pred, " ");
    strcat(pred, etalon);
    cout << "Text: " << pred << endl;
}
 
void func2(char*pred, char*etalon)
{
 
    strcat(etalon, " ");
    strcat(etalon, 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';
    tempvar[k] = '\0';
 
 
 
    strcat(etalon, " ");
    strcat(pred, etalon);
    strcat(pred, 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.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);
   if (a==2)
      func2(pred, etalon);
   if (a==3)
     {cout << "Введите слово после которого хотите вставить слово еталон: " << endl;
     cin >> slovo;
     func3(pred, etalon, slovo);}
   if (a==0)
     {break;}
 }
  system("pause");
}
P.s. не исключено что будут баги. Уже сплю. тестируйте ии если что обращайтесь сюда же
Миниатюры
Вставить слово в определенную позицию в тексте  
0
6 / 6 / 5
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 01:34 16
В листинге программы, что вы скинули я тоже не знаю что там написано в функции. Скорее всего это не вся программа. Смотрите мое решение.
0
1 / 1 / 1
Регистрация: 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
6 / 6 / 5
Регистрация: 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
1 / 1 / 1
Регистрация: 08.09.2014
Сообщений: 77
24.11.2014, 10:52  [ТС] 19
ssergius, и у вас цикл нормально работает?
C++
1
2
 while(1)//возможность многократного выполнения алгоритма 
{
0
6 / 6 / 5
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 10:54 20
While (1) я не тестировал у себя, проверял только свои функции. While(1) будет всегда true, тут требуется преждевременной выход из тела цикла: break;
0
24.11.2014, 10:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2014, 10:54
Помогаю со студенческими работами здесь

В набранном тексте вставить между 1-ым и 2-ым словом новое слово
В пpоизвольном тексте вставить между пеpвым и втоpым словом новое слово. Если можно с...

В произвольном тексте вставить после первого слова новое слово
Дана последовательность символов A1, …, An. Группы символов, разделенные пробелом (одним или...

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

Вставить в строку H в позицию J подстроку T , а в позицию Y число X
Вставать в строку H в позицию J подстроку T , а в позицию Y число X. Вывести на экран символьную...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru