The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Помогите кто сможет!!!!!!, !*! xxxborland89, 21-Ноя-07, 23:22  [смотреть все]
помогите кто может
у меня есть строка все символы которой разделённые пробелами назовём словами, подщитать количество слов у которых первый и последний элимент одинаковый.
я попытался сделать но у меня чушь вышла:
# include <iostream.h>
# include <conio.h>
# include <string.h>
# include <stdio.h>
int main(){
int const n=10;
int i, k=4, j=0;
char m, a, b, c, p;
char s[n];
cout<<"Vvedite stroku\n";
gets(s);
for(i=0;i<n;i++){
if (((k%2)==0)&&(s==' ')){a=s[i-1];
                           b=s[i+1];
                           k++;}
if (((k%2)!=0)&&(s==' ')){m=s[i-1];
                              p=s[i+1];
                              k++;}
c=s[0];
if((i==0)&&(c==a))j++;
if ((k>4)&&(b==m))j++;
if ((k>4)&&(p==a))j++;

cout<<"a="<<a<<" "<<"b="<<b<<" "<<"m="<<m<<" "<<"\n";
}
cout<<"j="<<j;

getch();
return 0;}
помогите пожалуйста!!!!!!!

  • Помогите кто сможет!!!!!!, !*! phpcoder, 08:22 , 22-Ноя-07 (1)
    >помогите кто может

    Полагаю, что помочь тут сможет любой. Вопрос в том -- станет ли? Задачка элементарная, почему сам решить не можешь?

    >у меня есть строка все символы которой разделённые пробелами назовём словами, подщитать
    >количество слов у которых первый и последний элимент одинаковый.
    >я попытался сделать но у меня чушь вышла:
    ># include <iostream.h>

    С некоторых пор (новый стандарт) для стандартных С++-шных хедеров не надо указывать .h:

    #include <iostream>

    ># include <conio.h>

    Этого хедера нет под Линуксом, если я правильно помню. Вы программу писАли под Виндой, видимо?

    ># include <string.h>
    ># include <stdio.h>

    В программах на С++ советуют подключать Сишные хедеры так:

    ># include <сstring>
    ># include <сstdio>

    Вот только они вам не нужны здесь: string.h не используется совсем, а stdio.h нужен для gets(), который нужно выкинуть. :)

    >int main(){
    >int const n=10;
    >int i, k=4, j=0;
    >char m, a, b, c, p;
    >char s[n];
    >cout<<"Vvedite stroku\n";
    >gets(s);

    Здесь ошибка. Классический пример, когда пользователь может ввести строку превышающую размер массива и вызвать переполнение буфера.

    [...]

    Вот вам алгоритм:
    - в цикле пройтись по всем словам в строке. Это можно сделать с помощью поиска символа пробела, ведь слова, по условию, разделены именно им.
    - если первый символ слова равен последнему увеличить значение счётчика.

    Это всё.

    Сами напишете? Тут не сложно.


  • Помогите кто сможет!!!!!!, !*! phpcoder, 11:00 , 22-Ноя-07 (2)
    Вот мой вариант на С++:

    #include <iostream>
    #include <string>
    #include <cctype>

    using std::cin;
    using std::cout;
    using std::endl;
    using std::string;

    namespace {

    size_t words_count = 0;

    void check_word(const string &str, size_t begin, size_t end) {
        
        // skip non alphabetic characters at begin of word
        while (isalpha(str.at(begin)) == 0) {
            ++begin;
        }
        
        // skip non alphabetic characters at end of word
        while (isalpha(str.at(end)) == 0) {
            --end;
        }
        
        if (str.at(begin) == str.at(end)) {
            ++words_count;
        }
    }

    } // end of anonymous namespace


    int main() {
        
        string line;
        
        // get string from user
        getline(cin, line);
        
        string::size_type pos;
        string::size_type prev_pos = 0;
        
        // check all words in line
        while ((pos = line.find(' ', prev_pos)) != string::npos) {
            check_word(line, prev_pos, pos-1),
            prev_pos = pos + 1;
        }
        
        // check last word in line
        check_word(line, prev_pos, line.size()-1);
        
        // print result
        cout << "Found: " << words_count << endl;
        
        return 0;
    }

    Вот как работает:
    [c0der@rock ~]$ g++ count_words.cc -o count_words -W -Wall -ansi -pedantic
    [c0der@rock ~]$ echo 'test! "bla" test "test" Slava! coder? test' | ./count_words
    Found: 4

  • Помогите кто сможет!!!!!!, !*! phpcoder, 15:05 , 22-Ноя-07 (3)
    >помогите кто может
    >у меня есть строка все символы которой разделённые пробелами назовём словами,

    Жесть.. Я неправильно задание понял. Я его и сейчас не очень понимаю. Автору читать доку о том как задавать вопросы не меньше двух раз.

  • Помогите кто сможет!!!!!!, !*! tux2002, 16:16 , 22-Ноя-07 (4)
    Вроде я также понял

    #include <iostream>
    #include <cstdlib>
    #include <string>

    using namespace std;

    int main(int argc, char *argv[])
    {
      string s;
      cout << "Vvedite stroku:\n";
      getline(cin,s);
      s+="  ";//Два пробела
      int counter = 0;
      char bc = s[0];
      char ec = ' ';
      for (size_t i = 0; i < s.size()-1; i++)
      {
        if (s[i] == ' ')
        {
          ec = s[i-1];
          if (ec==bc & ec!=' ')
          {
            counter++;
          }
          bc = s[i+1];
        }
      }
      cout << counter;
      
      return 0;
    }

    • Помогите кто сможет!!!!!!, !*! phpcoder, 16:20 , 22-Ноя-07 (5)
      [...]
      >      if (ec==bc & ec!=' ')

      Ошибка. :)

      • Помогите кто сможет!!!!!!, !*! tux2002, 18:34 , 22-Ноя-07 (6)
        #include <iostream>
        #include <cstdlib>
        #include <string>
        using namespace std;

        int main(int argc, char *argv[])
        {
          string s;
          cout << "Vvedite stroku:\n";
          getline(cin,s);
          s+=" ";//один пробел
          int counter = 0;
          char bc = s[0];
          char ec = ' ';
          string::iterator i;
          for (i=s.begin();i!=s.end();i++)
          {
            if ((*i) == ' ')
            {
               ec=*(i-1);
               counter=(ec==bc & ec!=' ')? counter+1:counter;
               bc=(i==s.end())? bc:*(i+1);
            }
          }
          cout << counter;
          
          return 0;
        }

        Не ошибка если пробелов многомежду словами

        • Помогите кто сможет!!!!!!, !*! tux2002, 18:52 , 22-Ноя-07 (7)
          Блин сам дурак

          #include <iostream>
          #include <cstdlib>
          #include <string>
          using namespace std;

          int main(int argc, char *argv[])
          {
            string s;
            cout << "Vvedite stroku:\n";
            getline(cin,s);
            s+=" ";//один пробел
            int counter = 0;
            char bc = *s.begin();
            char ec = ' ';
            for (string::iterator i=s.begin();i!=s.end();i++)
            {
              if ((*i) == ' ')
              {
                 ec=(i==s.begin())?' ':*(i-1);
                 counter=(ec==bc & ec!=' ')? counter+1:counter;
                 bc=(i==s.end())? ' ':*(i+1);
              }
            }
            cout << counter;
            
            return 0;
          }

          Хотя и прошлый вариант работал, но




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру