#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);
}
Програма для определения цифр и букв в строке
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;
}
Как работают ети программы? напишите пожалуста если можно поподробнее.
(А остальные символы пропускает.)
И выводит строку letters на экран.Например, если string - это "abcd---123\\\456", то
letters будет "abcd123456".
А как сделать чтобы прога виводила сначала буквы а потом цифры?
Цитата: 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';
// получили строку из одних букв ( без цифр )
j=0;
for(i = 0; string != '\0'; i++)
{
if( (string >= 'a' && string <= 'z') ||
(string >= 'A' && string <= 'Z') )
{
letters[j] = string;
j++;
}
}
letters[j]='\0';
// получили строку из одних букв ( без цифр )
char letters[81];
for(i = 0; string != '\0'; i++) {
if((string >= '0' && string <= '9'))
{letters[j] = string;
j++;}
чтобы получить цифры?
Цитата: octo96
тогда
char letters[81];
for(i = 0; string != '\0'; i++) {
if((string >= '0' && string <= '9'))
{letters[j] = string;
j++;}
чтобы получить цифры?
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);
}
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);
}
Код:
#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();
}
#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:
1. Объявление void separate(const char string[]); нужно поместить не внутри main, а перед main.
2. Внутри separate используются неинициализированные переменные j и k. Перед тем, как начать их использовать, им в данном случае нужно присвоить значение 0 (либо при объявлении, либо в инициализирующем выражении цикла for, внутри которого они используются).
Цитата: octo96
Посмотрите пожалуста где я ошыбся програма работает но не виводит желаемого результата она показывает только 2 пустые строчки и все.:confused:
Не забывайте об инициализации
Код:
[COLOR="Red"]j=0; k=0;[/COLOR]
for(i=0;string!='\0';++i)
{
if ( (string >= 'a' && string <= 'z') ||
// ...
for(i=0;string!='\0';++i)
{
if ( (string >= 'a' && string <= 'z') ||
// ...
Заработало!, Спасибо огромное всем кто помог!
Цитата: Ghox
1. Объявление void separate(const char string[]); нужно поместить не внутри main, а перед main.
Разве это является ошибкой?
В VS2005 программа компилируется нормально.
Единственная ошибка
Код:
//clrscr();
// error C3861: 'clrscr': identifier not found
// error C3861: 'clrscr': identifier not found
Цитата: Alex57
Разве это является ошибкой?
В VS2005 программа компилируется нормально.
В VS2005 программа компилируется нормально.
Ну, может и не ошибка, но всё-таки делать так (объявлять функцию внутри main) - ИМХО не есть хороший стиль программирования...
Цитата: Alex57
Единственная ошибка
Код:
//clrscr();
// error C3861: 'clrscr': identifier not found
// error C3861: 'clrscr': identifier not found
У меня то же самое (правда компилил не в Visual Studio, а с помощью GCC в Code::Blocks). :)
Похоже, что у автора библиотека conio.h содержит функцию clrscr (судя по описанию здесь, эта функция из библиотеки conio.h), а у нас - нет.