Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2012, 23:25   #1
sqr
Пользователь
 
Аватар для sqr
 
Регистрация: 26.10.2011
Сообщений: 49
По умолчанию Символы c++

Задача: Даны натуральное число n, символы s1,.....sn. Подсчитать, сколько раз среди данных символов встречается буква х.
Объявил строку символов. Генерирую случайное число и добавляю в новую строку символ из первой строки который равен числу которое сгенерировалось. Но ничего не работает =( запарился уже.
На Паскале сделал это за 10 минут, на си все сложней не могу разобратся.
компилятор Dev-C++
Код:
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h> 
int random ( int p )
{
return rand() % p;
}
main()
{
      srand(time(NULL));
      int n,i,k,count;
      char s1[27] = "abcdefghijklmnopqrstuvwxyz";
      char s2[50];
      printf("введите длину строки (1-30): ");
      scanf("%d", &n);
      for (i=1;i<=n;i++)
      {
      k = random(27);
      s2=s2+s1[k];
      printf("%s \n", s1[k]);
      }
      while ( s2[i] != '\0' )
      {
      if ( s[i] == 'x' )
      count=count+1;
      i ++;
      }
      printf("Символ 'x' встречается %d раз", count);
      getch();           
}
Everybody lies.

Последний раз редактировалось sqr; 19.02.2012 в 23:27.
sqr вне форума Ответить с цитированием
Старый 20.02.2012, 00:01   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Дык а что именно-то не работает? В чем проблема?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.02.2012, 00:13   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
srand(time(NULL));  int n,i,k,count=0; //<--- без инициализации ошибка рантайма
                                //По хорошему, все переменные нужно инициализировать явно
    
    char s1[27] = "abcdefghijklmnopqrstuvwxyz"; char s2[50];
    printf("введите длину строки (1-30): ");  scanf("%d", &n);

    for (i=0;i<n;i++) 
    {  
        k = random(26);  //<--- исправил магическое число. Иначе был баг - s1[k] иногда возвращала '\0'
        s2[i]=s1[k];     //<--- обрати внимание, как заполняется массив-приемник. (см свой вопрос в теме)
        printf("%c \n", s1[k]); //<--- исправил баг. В оригинале стояла %s, а она требует указатель
                                //%с требует чар
    }
    s2[i]='\0'; //<--- "обрезаю" строку-приёмник. 
            //Все "правильные" си-строки завершаются символом нуль-терминатором

    i=-1;
    while ( (++i, count +=(s2[i] == 'x'), s2[i] != '\0') ); //<--- просто возьми на вооружение
             //"короткие циклы", или по другому - циклы "без туловища" 
                //реализуются за счет использования operator запятая

    //Оператор "запятая" ухудшает читабельность, 
    //поэтому не рекомендуется использовать для сложных выражений
    //А вот в "коротких циклах" очень удобно
    
    printf("Символ 'x' встречается %d раз", count);   getch();
Да, чуть не забыл: в циклах, где принципиальное значение имеет счетчик, лучше использовать for, а не while
Например, вот так:
Код:
for(size_t i=0; s2[i] != '\0'; count +=(s2[i] == 'x'), ++i ); //короткий цикл for
Но лучше уж тогда вот так:
Код:
for(size_t i=0; s2[i] != '\0'; ++i ) count +=(s2[i] == 'x'); //так читабельнее

Последний раз редактировалось _Bers; 20.02.2012 в 00:30.
_Bers вне форума Ответить с цитированием
Старый 20.02.2012, 00:30   #4
sqr
Пользователь
 
Аватар для sqr
 
Регистрация: 26.10.2011
Сообщений: 49
По умолчанию

_Bers, спасибо огромное за помощь и объяснения! =) Всё работает =)

_Bers, Пока что использую полные формы записи, чтоб не запутыватся
Everybody lies.

Последний раз редактировалось Stilet; 20.02.2012 в 08:31.
sqr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны натуральное число n и символы s1,...,sn. Получите все символы, расположенные до первого двоеточия (Pascal) Татьана Помощь студентам 16 22.09.2011 15:05
символы Nostalgia Помощь студентам 12 30.12.2008 20:19
СИМВОЛЫ - помогите решить задачу на символы kiko Паскаль, Turbo Pascal, PascalABC.NET 5 30.11.2008 16:09
символы Rend1 Общие вопросы Delphi 1 10.04.2008 01:39