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

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

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

Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом - - C++

02.11.2013, 22:43. Просмотров 838. Ответов 8
Метки нет (Все метки)

Дан текст. Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом –.

Вот код, но там есть ошибка в 10 строке
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <string>
using namespace std;
int main()
{ char text[256] = "dsakfs23423daf3 asdfa23sdf asdf7sdaf +asdfsadf sad68fas+67df";
  puts (text);
  char st1[256];
  for (int i = 0; i < strlen (text); i++)
      
      if (text[256] = '+')
      { strncpy (st1, text, strchr (text, '+'));
        for (int i = 0; i < strlen (st1); i++)
            if (st1[i] == isdigit (st1[i]))
                st1[i] = '-'; 
      }
 
      else if (text[256] != '+') puts (text);
 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2013, 22:43     Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом -
Посмотрите здесь:
C++ Если в строке нет символа +, то оставить строку без изменений, иначе каждую из цифр перед символом + заменять на *
Каждую из малых латинских букв, предшествующих первому вхождению символа *, заменить на цифру 3 C++
C++ Если эти числа равны, заменить их на 0, если нет - меньшое заменить большим, а большое оставить без изменения
Определить, сколько символов ‘e’ предшествует первому вхождению символа ‘u’ C++
C++ определить, сколько символов ‘e’ предшествует первому вхождению символа ‘u’ ( либо сколько всего символов ‘e’ в этой последовательности)
Каждую букву, стоящую после символа '.' непосредственно или отделенную символом ‘ ’ (пробел), преобразовать к C++
C++ Заменить в каждой строке текста символы, отличные от символа, введенного с клавиатуры, символом «#»
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kventin_zhuk
БНТУ ФИТР
215 / 155 / 15
Регистрация: 26.12.2012
Сообщений: 382
02.11.2013, 22:44     Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом - #2
kobrjatina, Все сделали, еще пожелания будут?

Наработки ваши давайте

Проходите по строке - нашли + - проход в обратном направлении, функциеё isdigit проходите в обратном направлении, пока не найдете цифру. Нашли - меняем её на минус. + к этому контроль границ массивов в циклах.
kobrjatina
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 52
02.11.2013, 22:55  [ТС]     Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом - #3
я никого не заставляю делать мне задачу, добрые и отзывчивые люди помогают мне добровольно
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
02.11.2013, 23:19     Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом - #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <regex>
#include <string>
 
using namespace::std;
 
int main()
{
    string s="dsakfs23423daf3 asdfa23sdf asdfsdaf +asdfsadf sadfasdf";
    cout <<"befor s= "<<s<<endl;
    smatch sm;
    if(regex_search(s,sm,regex("\\+")))
    {
        string temp=sm.prefix().str();
        temp=regex_replace(temp,regex("\\d"),string("-"));
        s=temp+sm[0].str()+sm.suffix().str();
    }
    cout <<"after s= "<<s<<endl;
    
 
    return 0;
}
MrGluck
03.11.2013, 04:35
  #5

Не по теме:

Цитата Сообщение от kobrjatina Посмотреть сообщение
я никого не заставляю делать мне задачу, добрые и отзывчивые люди помогают мне добровольно
хорошие у вас понятия по жизни. Работать также собираетесь?

ValeryS
Модератор
6542 / 5008 / 461
Регистрация: 14.02.2011
Сообщений: 16,655
30.11.2013, 15:58     Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом - #6
Цитата Сообщение от kobrjatina Посмотреть сообщение
text[256] = '+'
во первых сравнение это ==
во вторых ты пытаешься обратится к 257 ячейке которой нет
тебе нужно пройти по всей строке
C++
1
if (text[i] == '+')
в остальное не вникал
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
30.11.2013, 16:06     Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом - #7
Как то так:
C++
#include <iostream>
#include <string.h>
using namespace std;
 
int main()
{
    int t = 0;
    char text[] = "dsakfs23423daf3 asdfa23sdf asdf7sdaf +asdfsadf sad68fas+67df";
    
    cout << text << endl;
        
    for (int i = 0; i < strlen(text); i++)
    {
        if(text[i] == '+') { t = i; break; }
    }
 
    for (int i = 0; i < t; i++)
    {
        switch(text[i])
        {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                text[i] = '-';
                break;
        }
    }
 
    cout << text << endl;
}
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.12.2013, 20:56     Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом - #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
 
int main()
{
    std::string text = "sdj2134asdd1d12f5+dasd2314+dsad+345fcf";
    auto plus = std::find(std::begin(text), std::end(text), '+');
 
    if (plus != std::end(text)) {
        std::replace_if(std::begin(text), plus, [](char ch) { return std::isdigit(ch) != 0; }, '-');
    }
 
    std::cout << text << std::endl;
 
    return 0;
}
http://ideone.com/gsSTGm
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2017, 18:58     Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом -
Еще ссылки по теме:
C++ Определить длину введенной строки L, и если длина L четная, то удаляются 3 первых, иначе 3 последних символа
C++ Оставить без изменения последовательность, если она упорядочена
C++ Если введенный список упорядочен по возрастанию, то оставить его без изменения
Строки. Дан текст. Найти позиции заданного символа в тексте C++
C++ Если в тексте есть одинаковые слова, заменить все их экземпляры символом из заданного набора

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

Или воспользуйтесь поиском по форуму:
zarko97
251 / 32 / 0
Регистрация: 11.10.2015
Сообщений: 243
18.03.2017, 18:58     Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом - #9
C++
1
2
3
4
5
6
7
8
9
10
if (some.find('+') == std::string::npos) return;
    for (auto pos = std::find(some.begin(), some.end(), '+'), it = pos; it != some.end() && pos != some.end(); ++it)
    {
        if (*std::prev(it) == std::isdigit(*std::prev(it)))
        {
            *std::prev(it) = '-';
            pos = std::find(it, some.end(), '+');
            it = pos;
        }
    }
Yandex
Объявления
18.03.2017, 18:58     Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом -
Ответ Создать тему
Опции темы

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