Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 9

счетчик в функции, который будет увеличиваться при каждом смещении указателя

26.10.2020, 18:59. Показов 1758. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нужно добавить счетчик в эту функцию, который будет увеличиваться при каждом смещении указателя для этого кода
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
#include <iostream>
#include <string>
 
using namespace std;
char* p(char* s, const char* s1)
{
char* i;
const char* t;
for (; *s; ++s)
{
for (i = s, t = s1; *i && *t && (*i == *t); ++i, ++t);
if (*t == 0)
{
break;
}
}
return s;
}
 
 
 
int main()
{
char s[100];
char s1[100];
cout « "s: ";
cin » s;
cout « "s1: ";
cin » s1;
}
если не понятно, что в коде, то в этом коде функция p выполняет следующее - сдвигает указатель s (начало строки s), пока не обнаружит равенство символов в s и s1 (начало вхождения подстроки s1), и затем проверяет, полностью ли входит s1 в s (сравнивает посимвольно, пока не дойдет до конца s1) - и если эти условия выполнены - возвращает указатель s
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2020, 18:59
Ответы с готовыми решениями:

Подскажите как создать форму, при запуске которой значение Label1 будет увеличиваться каждую миллисекунду?
Подскажите как создать форму, при запуске которой значение Label1 будет увеличиваться каждую миллисекунду?

Создание плагина на jQuery, который будет добавлять в поля ввода крестик, при клике на который будет очищаться значение.
Написать плагин, который будет добавлять в input и textarea крестик, при клике на который будет очищаться текущее поле (сразу проверьте и...

Счетчик по нажатию должен увеличиваться, но этого не делает.
Пишу &lt;% Dim a(9) for i = 0 to 9 a(i)=i next Sub my() if request.form('bool')='' then j=0 else

13
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.10.2020, 19:07
Цитата Сообщение от nansNSK Посмотреть сообщение
если не понятно, что в коде, то в этом коде функция p выполняет следующее - сдвигает указатель s (начало строки s), пока не обнаружит равенство символов в s и s1 (начало вхождения подстроки s1), и затем проверяет, полностью ли входит s1 в s (сравнивает посимвольно, пока не дойдет до конца s1) - и если эти условия выполнены - возвращает указатель s
Непонятно, где ты вызываешь эту функцию.
0
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 9
26.10.2020, 19:11  [ТС]
в main
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.10.2020, 19:13
Цитата Сообщение от nansNSK Посмотреть сообщение
в main
Цитата Сообщение от nansNSK Посмотреть сообщение
int main()
{
char s[100];
char s1[100];
cout « "s: ";
cin » s;
cout « "s1: ";
cin » s1;
}
Не вижу, где?
0
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 9
26.10.2020, 19:17  [ТС]
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Не вижу, где?
C++
1
cout « p(s, s1);
но в этом я не уверен.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
26.10.2020, 19:21
Цитата Сообщение от nansNSK Посмотреть сообщение
но в этом я не уверен.
Ну а счётчик-то тебе зачем понадобился, если ты даже не знаешь, как вызывать свою же функцию?
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
26.10.2020, 19:29
nansNSK, вы понимаете, что это вырвиглазный код?
C++
1
2
3
4
5
6
7
8
9
char* p(char* s, const char* s1) {
    char* i;
    const char* t;
    for (; *s; ++s) {
        for (i = s, t = s1; *i && *t && (*i == *t); ++i, ++t);
        if (*t == 0) { break; }
    }
return s;
}
Объясните вкратце, что делает функция.
Указатель можно двигать по строке следующим образом:
1) вы берете int len = strlen(от строки)
2) в цикле
C++
1
2
3
4
while(len--) {
// гоняете указатель по строке 
/* то, чему присваиваем символ строки = */ *s++;
}
Тут счётчиком выступает len, только декрементируется.
0
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 9
26.10.2020, 19:52  [ТС]
Цитата Сообщение от Timurs Посмотреть сообщение
Объясните вкратце, что делает функция.
задается строка и подстрока
и затем проверяет, полностью ли входит подстрока в строку,
и затем возвращает строку

Добавлено через 5 минут
Цитата Сообщение от Timurs Посмотреть сообщение
/* то, чему присваиваем символ строки = */ *s++;
не совсем понял, что присваивается
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
26.10.2020, 19:54
nansNSK, а смысл, если у вас при любом раскладе строка исходная возвращается? То есть в не зависимости от того полностью входит подстрока или нет, вы возвращаете исходную строку.
0
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 9
26.10.2020, 19:58  [ТС]
Цитата Сообщение от Timurs Посмотреть сообщение
nansNSK, а смысл, если у вас при любом раскладе строка исходная возвращается? То есть в не зависимости от того полностью входит подстрока или нет, вы возвращаете исходную строку.
т.е. мне нужно убрать return или возвращать 0?
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
26.10.2020, 20:00
nansNSK, более реалистичный пример. В C++ строки записываются с NULL-символом на конце. Например A|r|t|e|m|o|n|NULL| - С++ строка, функция strlen(s) вернет длину строки 7. Есть ещё Pascal строки или строки со счетчиком байтов в начале, то есть так |7|A|r|t|e|m|o|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
#include <iostream>
 
using std::cout; using std::endl;
 
// конвертировать s из Pascal в C++
void PtoCStr(char * s) {
    char * pas = s;
    cout << endl << "passtr: " << pas << endl;
    int len = *s++ - '0'; // длина Pascal строки
    while (len--) { // передвинуть каждый символ влево
        *(s - 1) = *s++; // на одну позицию
    }
    *(s-1) = *s; // передвинуть NULL-символ
    cout << "cstr:" << pas << endl;
}
 
 
// конвертировать s из C++ в Pascal
void CtoPString(char * s) {
    cout << "cstr: " << s << endl;
    int len = strlen(s); // длина C++ строки
    while (len--) { // передвинуть каждый символ вправо
        s[len + 1] = s[len]; // на одну позицию
    }
    s[len + 1] = 0; // передвинуть NULL-символ
    *s = char(strlen(s + 1) + '0'); // счётчик байтов
    cout << "passtr: " << s << endl;
}
 
int main() {
 
    char strpas[4+1] = "3Tim";
 
    PtoCStr(strpas);
       
       cout << endl;
       
       char cstr[4+1] = "Tim";
    CtoPString(cstr);
 
    return 0;
}
Добавлено через 1 минуту
nansNSK,
Цитата Сообщение от nansNSK Посмотреть сообщение
т.е. мне нужно убрать return или возвращать 0?
я бы отправлял булево значение, true -- исходная строка содержит в себе искомую подстроку, false -- не содержит.
0
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 9
26.10.2020, 20:16  [ТС]
Цитата Сообщение от Timurs Посмотреть сообщение
я бы отправлял булево значение, true -- исходная строка содержит в себе искомую подстроку, false -- не содержит.
C++
1
2
3
4
if(___)
return true;
else
return false;
что - то подобное?
0
59 / 49 / 14
Регистрация: 23.02.2016
Сообщений: 433
26.10.2020, 21:21
Лучший ответ Сообщение было отмечено nansNSK как решение

Решение

nansNSK, не, вот так например
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
#include <iostream>
 
using std::cout; using std::endl;
 
bool findsub(char * str, char * sub) {
    int len = strlen(str);
    bool is_sub = false;
    while (len--) {
        if(*sub == *str++) { // когда в строке нашли 1-ый символ подстроки
            is_sub = strcmp(str-1, sub) == 0 ? true : false; // сравниваем
        }
    }
    return is_sub;
}
 
int main() {
 
    char str[4 + 1] = "3Tim";
    char sub[3 + 1] = "lim"; // false
        char sub[2 + 1] = "im"; // true
 
    cout << std::boolalpha << findsub(str, sub);
 
    return 0;
}
Добавлено через 44 минуты
nansNSK, в коде выше ошибка есть.
Когда исходная строка превышает подстроку.
Например Artemon и Artem когда сравниваются в функции strcmp() она возвращает 1, так как Artemon > Artem. Чтобы это учесть нам надо скопировать хвост исходной строки -- оставшуюся часть с момента совпадения 1-го символа подстроки -- во временную переменную (функция strcpy()), затем обрезать этот хвост по длине подстроки NULL-символом, а потом уже сравнивать.

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
#include <iostream>
 
using std::cout; using std::endl;
 
bool findsub(char * str, char * sub) {
    int len = strlen(str);
    bool is_sub = false;
    while (len--) {
 
        if(*sub == *str++) {
            // загружаем память под хвост исходной строки
            char * tail = new char[len+1+1];
            strcpy_s(tail, len + 1 + 1, str - 1);
            // обрезаем по длине посдстроки
            tail[strlen(sub)] = 0; // 0 - NULL-символ по ascii коду
            // сравниваем с подстрокой
            is_sub = strcmp(tail, sub) == 0 ? true : false;
            // выгружаем память из под хвоста
            delete tail;
        }
    }
    return is_sub;
}
 
int main() {
 
    char str[10 + 1] = "xxxArtemon";
    char sub[5 + 1] = "Artem";
 
    cout << std::boolalpha << findsub(str, sub);
 
    return 0;
}
Тут кривой момент char * tail = new char[len+1+1]; связан с тем, что в условии вайла стоит len--, то есть значение len уменьшается на 1, а потом мы только проваливаемся в цикл, для компенсации этого предварительного уменьшения на 1 она же и прибавляется len+1, второе же прибавление 1 идёт под NULL-символ, итого len+1+1.
1
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 9
27.10.2020, 01:05  [ТС]
еще хотелось бы узнать, как при вводе от пользователя строки считались пробелы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2020, 01:05
Помогаю со студенческими работами здесь

Счетчик, который будет тикать от 1 до 100, а потом обнуляться с интервалом 1 минута
Помогите сделать счетчик на сайт, который будет тикать от 1 до 100 а потом обнуляться с интервалом 1 минута, например на счетчике 1 а через...

Строка: Помогите создать счетчик, который будет выводить текст в заданном порядке
Всем привет. Ребят помогите пожалуйста создать счетчик который будет выводить текст в таком порядке aaaa aaab aaac aaad aaae ...

Как создать счетчик который будет сохранять свое значение после выхода из программы
В общем-то суть вопроса в теме. Создан тест в котором требуется вести количество пользователей прошедших его, как это можно реализовать?

Какой будет счетчик при использовании постфиксного инкремента?
Здравствуйте. Может это очевидно, но не могли бы пояснить, пожалуйста, в чем отличие постфиксного инкремента от префиксного. Да я читал, в...

Счетчик в программе, который сохраняет значение при закрытии проги
Народ подскажите как реализовать данную задачу: Пишу простенькую программу, цель - раздавать или продавать ее, и чтобы не делать какую...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru