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

Тема в разделе "C/C++/C#", создана пользователем CRESTEEN, 11 апр 2011.

  1. CRESTEEN

    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 перед двойным равно...и не понимаю что это означает. Не могли бы вы объяснить в чем ошибка?
     
  2. Rififi

    Rififi Гость

    CRESTEEN

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

    strlen(s)-3

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

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

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

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

    cin >> s

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

    CRESTEEN Гость

    Rififi

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    В использовании ничего страшного. Он имел в виду, что, если пользователь введет строку из всего двух символов, то цикл выполняться не будет.
    Но, как мне кажется, это корректно алгоритмически. Там идет проверка наличия "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++ этот момент как-то иначе сработает, нежели в паскале и т.п.
     
  5. xparen

    xparen Гость

    Исправил все ошибки в вашем коде. Не нашел правда места, где вы вставляете ! знаки после 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;
    }
     
  6. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    интереса ради, а что в Цпп указанный цикл сработает хотя бы раз при входном параметре длинной <=3 символов?
    т.е. при i=0 выражение i<0 равно true? О.о
     
  7. CRESTEEN

    CRESTEEN Гость

    Akupaka

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

    Добавлено: xparen

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

    xparen Гость

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

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

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Надеюсь ТС не против, если мы тут немного пообщаемся ;)

    Чесгря, не понимаю где я плохо читаю? )) Почему же я неправильно цитировал, и как ты вообще можешь знать правильно ли я цитировал, если это я цитировал? ;) Скорее мы на разных волнах, и ты не совсем верно понял суть моего вопроса. Может даже я некорректно его задал.
    А цитировал я именно то, на что желал обратить внимание. Понятно, что ты добавил тот условный оператор и его ранее не было, ведь постом ранее я предложил такую же проверку выполнить ;) И ты даже подписал почему, и вот именно к объяснению у меня появился вопрос :) На который ты, меж прочим, ответа не дал, а зачем-то увязался к другой части кода.
    И вообще, на что там компилятор мог ругаться? Может ошибка времени исполнения была, все же? Ну, это как бы лучше не путать. А раз ты мне уже репу подкрасил "за некую принципиальность" ))) то я уж буду принципиален )))
    Я был бы рад получить ответ на свой предыдущий вопрос! )

    Зато неплохо компилирую в уме ;)
     
  10. CRESTEEN

    CRESTEEN Гость

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

    xparen Гость

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

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

    CRESTEEN Гость

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

    Добавлено: xparen

    а еще вопросик) он у меня после BREAK пишет EXPRESSION SYNTAX это что такое? ;)
     
  13. CRESTEEN

    CRESTEEN Гость

    xparen

    ой) все) спасибо) работает) эт у меня руки кривые))))))))))))))
     
Загрузка...
Похожие Темы - задача на строки
  1. Shonny
    Ответов:
    0
    Просмотров:
    1.232
  2. elzim
    Ответов:
    0
    Просмотров:
    929
  3. ShaoKahn
    Ответов:
    1
    Просмотров:
    1.118
  4. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.105
  5. MonteCristo
    Ответов:
    1
    Просмотров:
    852

Поделиться этой страницей