Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Строка и работа с предложением в С

56K
28 марта 2010 года
Katish
5 / / 28.03.2010
Здравствуйте. Требуется программа на С, которая в введённой строке(строка идёт как предложение) подсчитывает количество цифр и отображает все слова предложения, которые содержат последнюю букву предыдущего слова не менее 2-х раз.
536
29 марта 2010 года
alex-kniaz
382 / / 07.08.2008
Во-первых видимо в студенты.
По превому вопросуу - можно например использовать такую функцию
Код:
function co_c(string s){
int i=0;
int c=0;
for(i=0;i<=strlen(s);i++)
{  if((s=='0')||(s='1')||(s='1')||(s='2')||(s='3')||(s=='4')||(s=='5')||(s='6')||(s='7')||(s='8')||(s='9'))
{
c++;
}
}
return c;
}

По второму - добавлейте все слова в массив, и анализируйте, начиная со второго.
В сях не спец, могут быть ошибки, но смысл такой
З.Ы. Поправьте, если ошибаюсь
376
30 марта 2010 года
Absolut
220 / / 22.11.2002
alex-kniaz, чему Вы учите студентов ?

В Си нет типа string, используется char*
Да и цикл через strlen() не лучший вариант.

Код:
#include <ctype.h>
int digitCount( char* s )
{
    int count = 0;
    char* cs;
    for( cs=s; cs; ++cs )
    {  
        if( isdigit( *cs ) ) ++count;
    }
    return count;
}


P.s. Поздно заметил приписку, что "не спец" ;)
56K
31 марта 2010 года
Katish
5 / / 28.03.2010
Спасибо, в целом с цифрами разобралась. Но со второй часть. пробемы. Есть такие мысли:
Код:
#include <conio.h>
#include <stdio.h>
void main()
{
char s[20],sl[10]; /* s-предложение sl- массив с подходящими словами*/
int i=0,c=0,j,m,l=0;
clrscr();
printf("vvedite stroky: ");
gets(s);
for(i=0;(s!='\0');i++)
 {  if((s>='0')&&(s<='9'))
    {
    c++;
    }
 }
printf("%d\n",c);
/* Цифры посчитали*/
i=0;
c=0;
for(i=0;(s!='\0');i++)
 {
 m=0; /* Счётчик кол-ва повторений последнего символа пред.слова*/
 l=0;
  if(s==' ')
  {c=i-1;
  for (j=i+1;(s[j]!=' ');j++)
    {
    if (j==c)
    m++;
    }
  if(m>=2)
   {
  for (j=i+1;(s[j]!=' ');j++)
     { sl[l++]=s[j];
     l++;
     }
   }
  }
  i++;
 }
printf("%s",sl);
getch();
}

Проблема, насколько я поняла в том что в массив sl ничего не записывается. Укажите пожалуйста ошибки.
9
31 марта 2010 года
Lerkin
3.0K / / 25.03.2003
Цитата: Katish

Проблема, насколько я поняла в том что в массив sl ничего не записывается. Укажите пожалуйста ошибки.



Не вдаваясь в подробности кода:

 
Код:
for (j=i+1;(s[j]!=' ');j++)
     { sl[l++]=s[j];
     l++;
     }
56K
31 марта 2010 года
Katish
5 / / 28.03.2010
 
Код:
for (j=i+1;(s[j]!=' ');j++)
     { sl[l++]=s[j];
     j++;
     }

Исправление не помогло, видимо потому что этого момента цикл не доходит, а пропускает его :(
9
31 марта 2010 года
Lerkin
3.0K / / 25.03.2003
Цитата: Katish
 
Код:
for (j=i+1;(s[j]!=' ');j++)
     { sl[l++]=s[j];
     j++;
     }

Исправление не помогло, видимо потому что этого момента цикл не доходит, а пропускает его :(


Я имел ввиду: зачем вообще второй инкремент чего бы то не было?

56K
31 марта 2010 года
Katish
5 / / 28.03.2010
Цитата:
Я имел ввиду: зачем вообще второй инкремент чего бы то не было?


Предполагалось для того чтобы перейти на след. символ записываемого слова,но вероятно вы правы. Всё равно до этого цикла дело не доходит - выводится пустая строка (вернее сказать не пустая, а с каким-то мусором пожим на шрифт Windings). Если значение sl задать сразу, то его и выведет в конечном итоге.

Всем спасибо, тема закрыта.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог