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

Ваш аккаунт

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

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

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

Програма для определения цифр и букв в строке

50K
15 декабря 2009 года
octo96
13 / / 04.12.2009
#include <stdio.h>

int main() {
void separate(const char string[]);
const char strToSeparate[81];

printf("Enter string: ");
scanf("%s", strToSeparate);
separate(strToSeparate);

return 0;
}

void separate(const char string[]) {
int i = 0;
int j = 0;

char letters[81];

for(i = 0; string != '\0'; i++) {
if((string >= 'a' && string <= 'z') ||
(string >= 'A' && string <= 'Z') ||
(string >= '0' && string <= '9')) {
letters[j] = string;
j++;
}
}

printf("Letters and Numbers: %s\n", letters);
}
и
#include <stdio.h>
#include <ctype.h>

int main(void)
{
char s[4096];
int i, c;

printf("Введите строку: ");
for(i = 0; i < sizeof(s) - 1 && (c = getchar()) != '\n'; )
if(isdigit(c) || isalpha(c))
s[i++] = c;
s = '\0';
printf("Результат: %s\n", s);
return 0;
}
Как работают ети программы? напишите пожалуста если можно поподробнее.
41K
15 декабря 2009 года
Alex57
44 / / 22.02.2009
Функция separate() копирует буквы и цифры из строки string в строку letters.
(А остальные символы пропускает.)
И выводит строку letters на экран.Например, если string - это "abcd---123\\\456", то
letters будет "abcd123456".
50K
15 декабря 2009 года
octo96
13 / / 04.12.2009
А как сделать чтобы прога виводила сначала буквы а потом цифры?
41K
15 декабря 2009 года
Alex57
44 / / 22.02.2009
Код:
#include <stdio.h>
 
int main() {
    void separate(const char string[]);
    char strToSeparate[81];  // не надо  const
   
    printf("Enter string: ");
    //scanf("%s", strToSeparate);[COLOR="Red"] // scanf прочитает только одно слово
    // чтобы прочитать всю строку, используем  gets()[/COLOR]    
    gets(strToSeparate);

    separate(strToSeparate);
   
    return 0;
}
 
void separate(const char string[]) {
    int i = 0;    
    int j = 0;        
 
    char letters[81];
 
    for(i = 0; string != '\0'; i++) {
        if((string >= 'a' && string <= 'z') ||
           (string >= 'A' && string <= 'Z') ||
           (string >= '0' && string <= '9')) {
            letters[j] = string;
            j++;
        }
    }
    [COLOR="red"]// в конец строки letters надо добавить нулевой символ
    letters[j]='\0';[/COLOR]
    printf("Letters and Numbers: %s\n", letters);
}
41K
15 декабря 2009 года
Alex57
44 / / 22.02.2009
Цитата: octo96
А как сделать чтобы прога виводила сначала буквы а потом цифры?



Код:
char letters[81];
j=0;
for(i = 0; string != '\0'; i++)
{
    if( (string >= 'a' && string <= 'z') ||
        (string >= 'A' && string <= 'Z')  )
    {
        letters[j] = string;
        j++;
    }
}
letters[j]='\0';
// получили строку из одних букв ( без цифр )
50K
15 декабря 2009 года
octo96
13 / / 04.12.2009
тогда

char letters[81];

for(i = 0; string != '\0'; i++) {
if((string >= '0' && string <= '9'))
{letters[j] = string;
j++;}
чтобы получить цифры?
12K
20 декабря 2009 года
Ghox
297 / / 26.07.2009
Цитата: octo96
тогда

char letters[81];

for(i = 0; string != '\0'; i++) {
if((string >= '0' && string <= '9'))
{letters[j] = string;
j++;}
чтобы получить цифры?


Да, если только цифры - то так (только код оформляйте тэгами CODE, пожалуйста).
А если исходную строку, состоящую из букв и цифр вперемешку, нужно преобразовать в строку, чтобы в ней сначала шли буквы, а потом цифры, то можно так:

Код:
void separate(const char string[]) {
    int i, j, k;
 
    char letters[81];
    char ciphers[81];
 
    for(i = 0, j = 0, k = 0; string != '\0'; i++)
    {
        if((string >= 'a' && string <= 'z') ||
           (string >= 'A' && string <= 'Z'))
        {
            letters[j] = string;
            j++;
        }
        else if(string >= '0' && string <= '9')
        {
            ciphers[k] = string;
            k++;
        }
    }

    // в конец строк letters и ciphers надо добавить нулевой символ
    letters[j]='\0';
    ciphers[k]='\0';

    // дописываем после букв цифры
    strcat(letters, ciphers);

    printf("Letters and Numbers: %s\n", letters);
}
50K
21 декабря 2009 года
octo96
13 / / 04.12.2009
Код:
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
int main()
    {clrscr();
    void separate(const char string[]);
    char strToSeparate[81];
    cout<<"\n Enter string: \n";
    gets(strToSeparate);
    separate(strToSeparate);
    return 0;}
void separate(const char string[])
    {int i;
    int j;
    int k;
    char letters[81];
    char numbers[81];
    for(i=0;string!='\0';++i)
    {if((string >= 'a' && string <= 'z') ||
    (string >= 'A' && string <= 'Z'))
        {letters[j] = string;
        ++j;}
     else if((string>='0' && string<='9'))
        {numbers[k]=string;
        ++k;}}
   letters[j]='\0';
  numbers[k]='\0';
    cout<<"\n letters: "<<letters;
    cout<<"\n numbers: "<<numbers;
    getch();
    }

Посмотрите пожалуста где я ошыбся програма работает но не виводит желаемого результата она показывает только 2 пустые строчки и все.:confused:
12K
21 декабря 2009 года
Ghox
297 / / 26.07.2009
Сходу вижу две ошибки:

1. Объявление void separate(const char string[]); нужно поместить не внутри main, а перед main.

2. Внутри separate используются неинициализированные переменные j и k. Перед тем, как начать их использовать, им в данном случае нужно присвоить значение 0 (либо при объявлении, либо в инициализирующем выражении цикла for, внутри которого они используются).
41K
21 декабря 2009 года
Alex57
44 / / 22.02.2009
Цитата: octo96
Посмотрите пожалуста где я ошыбся програма работает но не виводит желаемого результата она показывает только 2 пустые строчки и все.:confused:




Не забывайте об инициализации

 
Код:
[COLOR="Red"]j=0; k=0;[/COLOR]
    for(i=0;string!='\0';++i)
    {
        if (  (string >= 'a' && string <= 'z') ||
        // ...
50K
21 декабря 2009 года
octo96
13 / / 04.12.2009
Заработало!, Спасибо огромное всем кто помог!
41K
21 декабря 2009 года
Alex57
44 / / 22.02.2009
Цитата: Ghox
1. Объявление void separate(const char string[]); нужно поместить не внутри main, а перед main.



Разве это является ошибкой?
В VS2005 программа компилируется нормально.

Единственная ошибка

 
Код:
//clrscr();
    //   error C3861: 'clrscr': identifier not found
12K
21 декабря 2009 года
Ghox
297 / / 26.07.2009
Цитата: Alex57
Разве это является ошибкой?
В VS2005 программа компилируется нормально.


Ну, может и не ошибка, но всё-таки делать так (объявлять функцию внутри main) - ИМХО не есть хороший стиль программирования...

Цитата: Alex57
Единственная ошибка

 
Код:
//clrscr();
    //   error C3861: 'clrscr': identifier not found


У меня то же самое (правда компилил не в Visual Studio, а с помощью GCC в Code::Blocks). :)
Похоже, что у автора библиотека conio.h содержит функцию clrscr (судя по описанию здесь, эта функция из библиотеки conio.h), а у нас - нет.

50K
23 декабря 2009 года
octo96
13 / / 04.12.2009
Цитата: Ghox

Похоже, что у автора библиотека conio.h содержит функцию clrscr (судя по описанию здесь, эта функция из библиотеки conio.h), а у нас - нет.


Да так и есть

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