Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
assgaard
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 31
1

Доработка программы с++

30.03.2015, 10:03. Просмотров 831. Ответов 8
Метки нет (Все метки)

Добрый день уважаемые форумчане! я новорег, поэтому прошу не судить строго. Собственно сама задача: В тексте каждое слово one заменить на two. Написал программу, только она все слова one меняет на two, например: one oneself one oneone он меняет на two twoself two twotwo. А мне надо: two oneself two oneone. Т.е. только те слова one, которые разделены символами-разделителями. Вот сама программа:
C++ (Qt)
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
#include <cstring>
#include <iostream>
 
using namespace std;
 
int main()
{
    char del[] =
    {
        ' ', ',', '.', '\t', '\n', '\r', '\0'
    };
    char str[100];
    char slovo[] = "one";
    char novslovo[] = "two";
    char *p;
    int len;
 
    cout << " Vvedite text: " << endl;
    gets(str);
    p = strstr (str, slovo);
    while (p)
    {
        len = strlen (str);
        memcpy (p + strlen(novslovo), p + strlen(slovo), strlen(str) - strlen(slovo));
        memcpy (p, novslovo, strlen(novslovo));
        str[len - (strlen(novslovo) - strlen(slovo))] = 0;
        p = strstr (p, slovo);
    }
    cout << str;
    return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2015, 10:03
Ответы с готовыми решениями:

Доработка программы на С++
Я не могу сообразить, пожалуйстааа помогите(( Есть программа &quot;система учета...

Доработка программы с++
Доброй ночи! обращаюсь к вам еще раз. Указания к программе: Вместо линейного...

Доработка программы
Я написал программу, но она никак не хочет работать. Суть такая. Дана...

Маленькая доработка программы
Требуется написать программу для вычисления интеграла методом левых, правых и...

Требуется доработка программы.
Программа упорядочивает матрицу по возрастанию одинаковых эл-в в строке. ...

8
Байт
Эксперт C
19212 / 12338 / 2604
Регистрация: 24.12.2010
Сообщений: 25,376
30.03.2015, 10:56 2
assgaard, Попробуй перед строчкой 23 написать
C++
1
2
3
4
if (strchr(del, *(p+strlen(slovo))!=NULL) {
  p += strlen(slovo);
  continue;
}
Добавлено через 4 минуты
На всякий случай. В плане рефакторинга кода. Строчки 20-21 можно заменить;
C++
1
for(p=str; (p=strstr(p, slovo))!=NULL; p++)
Тогда и строчка 27 не нужна.
0
assgaard
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 31
30.03.2015, 11:14  [ТС] 3
К сожалению, та же картина, ничего не изменилось почти, сейчас если ввести one oneself one то выдает two twoself one
0
Байт
Эксперт C
19212 / 12338 / 2604
Регистрация: 24.12.2010
Сообщений: 25,376
30.03.2015, 11:20 4
Цитата Сообщение от assgaard Посмотреть сообщение
К сожалению, та же картина
Покажи новый код. Не весь, а со строчки 20.
0
assgaard
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 31
30.03.2015, 13:11  [ТС] 5
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
for(p=str; (p=strstr(p, slovo))!=NULL; p++)
     {
        if (strchr(del, *(p+strlen(slovo))!=NULL))
        {
          p += strlen(slovo);
          continue;
        }
        len = strlen (str);
        memcpy (p + strlen(novslovo), p + strlen(slovo), strlen(str) - strlen(slovo));
        memcpy (p, novslovo, strlen(novslovo));
        str[len - (strlen(novslovo) - strlen(slovo))] = 0;
    }
cout << str;
return 0;
}
0
Байт
Эксперт C
19212 / 12338 / 2604
Регистрация: 24.12.2010
Сообщений: 25,376
30.03.2015, 13:41 6
assgaard, Попробуй так
C++
1
2
3
4
5
6
for(p=str; (p=strstr(p, slovo))!=NULL; p++)
     {  char c = *(p+strlen(slovo));
        if (c!='\0' && strchr(del, c)) continue;
        memmove (p + strlen(novslovo), p + strlen(slovo), strlen(p) - strlen(slovo) + 1);
        memcpy (p, novslovo, strlen(novslovo));
    }
Функция memmove работает подобно memcpy, но ей не страшны "накладки"
Если не получится, попробую оттранслировать и проверить у себя, но чуть попозже.
1
assgaard
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 31
30.03.2015, 15:07  [ТС] 7
Опять мимо попробуй пожалуйста, буду очень благодарен. Просто срочно сдавать надо уже
0
Байт
Эксперт C
19212 / 12338 / 2604
Регистрация: 24.12.2010
Сообщений: 25,376
30.03.2015, 15:28 8
Лучший ответ Сообщение было отмечено assgaard как решение

Решение

Цитата Сообщение от assgaard Посмотреть сообщение
попробуй пожалуйста
Да, там я слегка напутал. Наоборот. Проверяю НЕ разделители
Вот так как будто работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>
main()
{ char *p, str[200];
  char *del = " ,.";
  char *slovo = "one";
  char *novslovo = "five"; // "two"
 
strcpy(str, "one onex one, oneoneo one");
for(p=str; (p=strstr(p, slovo))!=NULL; p++) {
  char c = *(p+strlen(slovo));
  if (strchr(del, c)==NULL) continue;
  if (p!=str && strchr(del, *(p-1))==NULL) continue; // Тут проверяю, что и ДО слова - разделитель
  memmove (p + strlen(novslovo), p + strlen(slovo), strlen(p) - strlen(slovo) + 1);
  memcpy (p, novslovo, strlen(novslovo));
}
printf("%s\n", str);
}
Удачи!
0
assgaard
0 / 0 / 0
Регистрация: 30.03.2015
Сообщений: 31
30.03.2015, 15:31  [ТС] 9
Цитата Сообщение от Байт Посмотреть сообщение
Удачи!
спасибо тебе огромное
0
30.03.2015, 15:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2015, 15:31

Доработка программы: вставка switch
Помогите доработать программу вставив в неё switch #include &lt;iostream&gt;...

Доработка программы для новичка
Господа форумчане, прошу у вас помощи, т.к. не понимаю суть задания. Вот...

Доработка программы для работы с классами
прикрепил проект, помогите плз доработать программу, там пару ошибок связанные...


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

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

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