• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

задача на строки

  • Автор темы CRESTEEN
  • Дата начала
C

CRESTEEN

Нужна помощь опытных людей) Ребят) задали задачку) я вроде решила) но компилятор ругается и выдает ошибку((

вот сама задача

Подсчитать во введенной строке, сколько раз встречается пара символов 'mo'. Каждый символ исходной строки, стоящий сразу за этой парой, поменять на знак '!'. Утверждается, что во введенной строке не может присутствовать 'momo'

вот мой код

#include<conio.h>
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main(){
clrscr();
char s[255];
cin>>s;
int k=0,b=0;
for (int i=0;i<strlen(s)-3;i++){
if ((s=="m")&&(s[i+1]=="o")&&(s[i+2]=="m")&&(s[i+3]=="o")){b=-1;break;
}}
if (b==-1)cout<<"momo found"; else
{for (i=0;i<strlen(s);i++){
if ((s=="m")&&(s[i+1]=="o"))k++;
}
cout<<"amount of mo found is "<<k;
}
return 0;}

ошибку выдает

cannot convert 'char' to 'char *' d первом IF перед двойным равно...и не понимаю что это означает. Не могли бы вы объяснить в чем ошибка?
 
R

Rififi

CRESTEEN

а этот здесь зачем?

strlen(s)-3

что будет, если я веду строку из двух символов? цикл от 0 до -1? :eek:
в принципе, можно итак оставит, но тогда скрести пальцы, чтобы препод не докопался.

cannot convert 'char' to 'char *' d первом IF перед двойным равно...и не понимаю что это означает.

это значит, что ты пытаешься сравнивать символ и строку, а это не кошерно.
символы в C++ дожны записываться в одинарных кавычках, а не двойных

ну и напоследок, вот такой ввод:

cin >> s

добавит в s символы до первого пробела. то есть из введенной строки "Петя любит Машу" получится только Петя.
если хочешь с пробелами, надо использовать getline
 
C

CRESTEEN

Rififi

а что такого в использовании strlen? прост нам преподаватель обьяснял именно так...поэтому я не знаю что тут неправильного) если не трудно обьясни пожалуйста))))
 
A

Akupaka

for (int i=0;i<strlen(s)-3;i++){
а что такого в использовании strlen?
В использовании ничего страшного. Он имел в виду, что, если пользователь введет строку из всего двух символов, то цикл выполняться не будет.
Но, как мне кажется, это корректно алгоритмически. Там идет проверка наличия "momo" последовательности, а, если длинна строки меньше 4 символов, то проверка не требуется.
Хотя, более наглядной будет проверка длинны, например:
C++:
if (strlen(s) >= 4) {выполнить поиск momo}
В некоторых случаях такое можно принять за излишество. Но на этапе обучения, имхо, полезно.

А вот цикл далее
C++:
for (i=0;i<strlen(s);i++){
if ((s[i]=="m")&&(s[i+1]=="o"))k++;
}
по-идее, получит ошибку времени выполнения, в случае, если длинна строки 1 символ, т.к. будет попытка обращения к области за строкой. Хотя, может в C++ этот момент как-то иначе сработает, нежели в паскале и т.п.
 
X

xparen

===============================================
Подсчитать во введенной строке, сколько раз встречается пара символов 'mo'. Каждый символ исходной строки, стоящий сразу за этой парой, поменять на знак '!'. Утверждается, что во введенной строке не может присутствовать 'momo'
===============================================
Исправил все ошибки в вашем коде. Не нашел правда места, где вы вставляете ! знаки после mo =) Если ничего не выйдет пишите, будем решать=)))
C++:
#include <conio.h> // библиотека для getch() (задерживает результат на экране после выполнения)
#include <iostream.h> //библиотека для ввода/вывода 
#include <string.h> //библиотека для работы со строками

int main(){

char s[255];
int k=0,b=0;
puts("Vvedite stroky ");
gets(s);	//изменил ввод строки

if(strlen(s)>=4){ //добавил проверку возможности поиска momo в строке (иначе вылезла ошибка, если введешь строку из 3 и менее символов)
for(int i=0;i<strlen(s)-3;i++){
if ((s[i]=='m')&&(s[i+1]=='o')&&(s[i+2]=='m')&&(s[i+3]=='o')){ // исправил ошибку (ковычки одинарные)
b=-1;
break;
}
}
}
if(b==(-1))
puts("momo found");
else{
for(int i=0;i<strlen(s)-1;i++){ // исправил strlen(s) на strlen(s)-1 дабы не вылазила ошибка о неожиданном конце строки
if((s[i]=='m')&&(s[i+1]=='o'))
k++;
}
printf("amount of mo found is %d", k); // изменил вывод (вместо cout) кол-ва одинарных mo
}
getch(); //добавил задержку результата на экране (чтобы не пропадал после выполнения программы)
return 0;
}
 
A

Akupaka

иначе вылезла ошибка, если введешь строку из 3 и менее символов) for(int i=0;i<strlen(s)-3;i++){
интереса ради, а что в Цпп указанный цикл сработает хотя бы раз при входном параметре длинной <=3 символов?
т.е. при i=0 выражение i<0 равно true? О.о
 
C

CRESTEEN

Akupaka

спасибо за обьяснения) потихоньку начинаю разбираться))

Добавлено: xparen

Спасибо за исправления ошибок и разъяснения) ттолько компилятор ругается) и выдает ошибочку типа Function 'puts' should have a prototype
почему?(
 
X

xparen

интереса ради, а что в Цпп указанный цикл сработает хотя бы раз при входном параметре длинной <=3 символов?
т.е. при i=0 выражение i<0 равно true? О.о
плохо ты читаешь текст, убедился в этом 2 раз.... ключевое слово в строке, которую ты не правильно цитировал, ДОБАВИЛ...
раньше выражения if(strlen(s)>=4) не было...и уже в том случае компилятор ругаться бы начал
З.Ы. сор если показался грубым...

Добавлено:
выдает ошибочку типа Function 'puts' should have a prototype
почему?(
Я не крутой "прогер", но вы случайно не забыли включить библиотеки
C++:
#include <conio.h> // библиотека для getch() (задерживает результат на экране после выполнения)
#include <iostream.h> //библиотека для ввода/вывода 
#include <string.h> //библиотека для работы со строками

// возможно не хватает библиотеки, хотя у меня работает без неё 
#include<stdio.h>
 
A

Akupaka

Надеюсь ТС не против, если мы тут немного пообщаемся ;)

плохо ты читаешь текст, убедился в этом 2 раз.... ключевое слово в строке, которую ты не правильно цитировал, ДОБАВИЛ...
раньше выражения if(strlen(s)>=4) не было...и уже в том случае компилятор ругаться бы начал
Чесгря, не понимаю где я плохо читаю? )) Почему же я неправильно цитировал, и как ты вообще можешь знать правильно ли я цитировал, если это я цитировал? ;) Скорее мы на разных волнах, и ты не совсем верно понял суть моего вопроса. Может даже я некорректно его задал.
А цитировал я именно то, на что желал обратить внимание. Понятно, что ты добавил тот условный оператор и его ранее не было, ведь постом ранее я предложил такую же проверку выполнить ;) И ты даже подписал почему, и вот именно к объяснению у меня появился вопрос :) На который ты, меж прочим, ответа не дал, а зачем-то увязался к другой части кода.
И вообще, на что там компилятор мог ругаться? Может ошибка времени исполнения была, все же? Ну, это как бы лучше не путать. А раз ты мне уже репу подкрасил "за некую принципиальность" ))) то я уж буду принципиален )))
Я был бы рад получить ответ на свой предыдущий вопрос! )

плохо ты читаешь текст
Зато неплохо компилирую в уме ;)
 
C

CRESTEEN

xparen
спасибо за подсказку) а можно вопрос?)) у тебя компилятор не нашел ошибок и программа работала?))
 
X

xparen

xparen
спасибо за подсказку) а можно вопрос?)) у тебя компилятор не нашел ошибок и программа работала?))
Опять же повотрюсь=) у меня в моем первозданном виде работает и компилируеться нормально. Я не великий "прогер"... Но, возможно, разные компиляторы... по разному требуют чего-то=) это просто мои догадки=)))

Добавлено:
Зато неплохо компилирую в уме ;)
Я не сомневаюсь в твоих способностях к программированию........ Давай оставим неприязни где-то там, ибо правильно тобой подмечено ".. видимо мы говорим на разных языках..." ....и не будем оффтопить =)
 
C

CRESTEEN

xparen
огромное спасибо за помощь)))))))) :)

Добавлено: xparen

а еще вопросик) он у меня после BREAK пишет EXPRESSION SYNTAX это что такое? ;)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!