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

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

Восстановить пароль Регистрация
 
 
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 76
23.11.2014, 22:31     Вставить слово в определенную позицию в тексте #1
Организовать ввод эталонного слова и предложения (слова разделяются пробелом(пробелами)). По выбору пользователя вставить эталонное слово а)в конец предложения; б)в начало предложения; в)после слова 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");
}
Миниатюры
Вставить слово в определенную позицию в тексте  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2014, 22:31     Вставить слово в определенную позицию в тексте
Посмотрите здесь:

В произвольном тексте вставить между вторым и третьим словом новое слово C++
C++ В тексте заменить слово А(любое слово) на слово В(любое слово). А и В разной длинны
Вставить заданное число в определенную позицию массива C++
C++ Ifstream переход в определенную позицию
Написать функцию добавления значения в определенную позицию списка, заданную пользователем C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr_Progger
23.11.2014, 22:39
  #2

Не по теме:


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

ssergius
6 / 6 / 2
Регистрация: 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);
попробуйте так)
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 76
23.11.2014, 23:49  [ТС]     Вставить слово в определенную позицию в тексте #4
ssergius, для начала у меня проблема в переменных, где-то массив, а где-то через указатель, каша получилась и я запуталась
ssergius
6 / 6 / 2
Регистрация: 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");
}
Миниатюры
Вставить слово в определенную позицию в тексте  
ssergius
6 / 6 / 2
Регистрация: 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;
}
Вторая функция
Миниатюры
Вставить слово в определенную позицию в тексте  
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 76
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, не срабатывает
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 00:30     Вставить слово в определенную позицию в тексте #8
Alt+F7
Миниатюры
Вставить слово в определенную позицию в тексте  
Valeriy147
0 / 0 / 0
Регистрация: 24.11.2014
Сообщений: 2
24.11.2014, 00:32     Вставить слово в определенную позицию в тексте #9
либо вместо функции 'strcat' напиши 'strcat_s'.
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 76
24.11.2014, 00:39  [ТС]     Вставить слово в определенную позицию в тексте #10
ssergius, где это найти? в студии 2012

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

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

Добавлено через 2 минуты
Цитата Сообщение от Yana_Chernobay Посмотреть сообщение
cout << "3) после слова N: " << endl;
подскажите что с этим можно сделать?
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 00:46     Вставить слово в определенную позицию в тексте #11
Alt+F7 не вызывает окно?
Странно. в Visual Studio 2012 сам работаю. Попробуйте еще раз. Штука эта будет постоянно всплывать у вас.
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 76
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
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 00:51     Вставить слово в определенную позицию в тексте #13
скиньте весь листинг программы
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 76
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");
}
ssergius
6 / 6 / 2
Регистрация: 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. не исключено что будут баги. Уже сплю. тестируйте ии если что обращайтесь сюда же
Миниатюры
Вставить слово в определенную позицию в тексте  
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 01:34     Вставить слово в определенную позицию в тексте #16
В листинге программы, что вы скинули я тоже не знаю что там написано в функции. Скорее всего это не вся программа. Смотрите мое решение.
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 76
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;
}
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;
}
Yana_Chernobay
0 / 0 / 0
Регистрация: 08.09.2014
Сообщений: 76
24.11.2014, 10:52  [ТС]     Вставить слово в определенную позицию в тексте #19
ssergius, и у вас цикл нормально работает?
C++
1
2
 while(1)//возможность многократного выполнения алгоритма 
{
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2014, 10:54     Вставить слово в определенную позицию в тексте
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ssergius
6 / 6 / 2
Регистрация: 10.03.2013
Сообщений: 48
24.11.2014, 10:54     Вставить слово в определенную позицию в тексте #20
While (1) я не тестировал у себя, проверял только свои функции. While(1) будет всегда true, тут требуется преждевременной выход из тела цикла: break;
Yandex
Объявления
24.11.2014, 10:54     Вставить слово в определенную позицию в тексте
Ответ Создать тему
Опции темы

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