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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2016, 13:27   #1
LWM
Новичок
Джуниор
 
Регистрация: 30.11.2016
Сообщений: 1
Вопрос [СИ] Определить наличие заданных символов в строке

Помогите доделать программу. Мне нужно составить программу, которая определяет есть ли в строке буквы d,o,g и считает сколько раз они встречаются в ней.
Вот моя программа:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <locale.h>

int main(void) 
{setlocale(LC_ALL, "Russian");
int k; char s[10]; int i;int a,b,c,d,e,f=0;
printf("Введите строку:\n");
scanf("%c",&s);
k=0;
 for(i=0;i<10;i++)
 {
if(s[i]=='d')
{printf("Символ d встречается в строке\n"); k=1;a++;}
if(s[i]=='o')
{printf("Символ o встречается в строке\n"); k=1;b++;}
if(s[i]=='g')
{printf("Символ g встречается в строке\n"); k=1;c++;}
if(s[i]=='D')
{printf("Символ D встречается в строке\n");k=1;d++;}
if(s[i]=='O')
{printf("Символ O встречается в строке\n");k=1;e++;}
if(s[i]=='G')
{printf("Символ G встречается в строке\n");k=1;f++;}
}
   if(k==0)
     {printf ("В строке  не содержатся символы d,o,g\n");}
    
printf("Символ d встречается %d раз\n",&a);
printf("Символ o встречается %d раз\n",&b);
printf("Символ g встречается %d раз\n",&c);
printf("Символ D встречается %d раз\n",&d);
printf("Символ O встречается %d раз\n",&e);
printf("Символ G встречается %d раз\n",&f);


getch();
	return 0;

}
Она не совсем работает. Когда я ввожу строку, например, ''dog'' то она пишет что в строке есть только символ 'd'. Ну и не считает сколько раз они встречаются.

Последний раз редактировалось LWM; 30.11.2016 в 13:31.
LWM вне форума Ответить с цитированием
Старый 30.11.2016, 14:11   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Когда я ввожу строку, например, ''dog'' то она пишет что в строке есть только символ 'd'
Вы не вводите строку, вы вводите символ и да, он именно 'd'

Цитата:
Ну и не считает сколько раз они встречаются.
1 раз, не?

Кстати, запись
Код:
int a,b,c,d,e,f=0;
говорит, что f = 0, а все остальные локальные переменные - какие бог на душу положит.
p51x вне форума Ответить с цитированием
Старый 30.11.2016, 14:32   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Замени в scanf %c на %s, обнули счетчики в программе, и все будет ОК.
Я давно не писал на Си и на компе у меня древний Борланд, но вот рабочий вариант :

Еще для ускорения в цикле else бы поставить или вообще через case сделать, но вариантов улучшить всегда море.
Код:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <locale.h>

int k; char s[20]; int i,l; int a,b,c,d,e,f=0;
void main (void)
{
scanf("%s",&s); l = strlen (s) ;
  a = 0; b = 0 ; c = 0 ; d = 0 ; e = 0 ; f = 0 ;
 for(i=0;i<l;i++)
 {
    if(s[i]=='d') a++;
    if(s[i]=='o') b++;
    if(s[i]=='g') c++;
    if(s[i]=='D') d++;
    if(s[i]=='O') e++;
    if(s[i]=='G') f++;
 }
    k=a+b+c+d+e+f ; printf ("l=%d, %d\n",l,k) ;
   if(k==0)
     printf ("No  such symbols \n") ;
   else
 
{   printf(" d in string %d \n",a);
    printf(" o in string %d \n",b);
    printf(" g in string %d \n",c);
    printf(" D in string %d \n",d);
    printf(" O in string %d \n",e);
    printf(" G in string %d \n",f);
}
getch();

}

Последний раз редактировалось digitalis; 30.11.2016 в 14:35.
digitalis вне форума Ответить с цитированием
Старый 30.11.2016, 14:37   #4
olej.tsil
Заблокирован
 
Регистрация: 29.11.2016
Сообщений: 215
По умолчанию

Цитата:
Сообщение от LWM Посмотреть сообщение
Она не совсем работает.
Она совсем не работает
Цитата:
Мама! Мама! Я уже научился пользоваться горшком, но не всегда ещё метко...


Главная ошибка:
Код:
scanf("%c",&s);
Что должно выглядеть так:
Код:
scanf( "%s", s );
Но там в каждой строке ошибки!
Вот как может выглядеть ваш переписанный код когда он работает:
Код:
   int k; char s[ 100 ]; int i;
   int a, b, c, d, e, f;
   printf( "Введите строку: " );
   scanf( "%s", s );
   k = a = b = c = d = e = f = 0;
   for( i = 0; i < strlen( s ); i++ ) {
      if( s[ i ] == 'd' )
         { k=1; a++; }
      if( s[i] == 'o' )
         { k=1; b++; }
      if( s[i] == 'g' )
         { k=1; c++; }
      if( s[i] == 'D' )
         { k=1; d++; }
      if( s[i] == 'O' )
         { k=1; e++; }
      if( s[i] == 'G' )
         { k=1; f++; }
   }
   if( k == 0 ) {
      printf ( "В строке  не содержатся символы d,o,g\n" );
   }
   else {
      printf( "Символ d встречается %d раз\n", a );
      printf( "Символ o встречается %d раз\n", b );
      printf( "Символ g встречается %d раз\n", c );
      printf( "Символ D встречается %d раз\n", d );
      printf( "Символ O встречается %d раз\n", e );
      printf( "Символ G встречается %d раз\n", f );
   }
Но это переписанный ваш код!
Он и при этом остаётся, по существу задачи, бездарным.
olej.tsil вне форума Ответить с цитированием
Старый 30.11.2016, 15:49   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Не надо так резко. Человек учится. Не все в начале пути были П.Нортонами или Н. Виртами.
digitalis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить на наличие символов между запятыми в строке? ULR Помощь студентам 2 09.02.2013 19:27
В строке символов определить символы, которые встречаются по одному разу Andrey770 Паскаль, Turbo Pascal, PascalABC.NET 12 27.03.2011 00:08
Без строкового типа определить наличие определённых символов (Pascal) (=Hello=) Помощь студентам 6 27.02.2011 09:57
определить количество символов и пробелов в строке без использования string.h Alena_897 Помощь студентам 5 07.12.2010 18:40
Подсчет количества заданных символов в строке Mihailo Помощь студентам 3 23.12.2007 11:58