Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Сортировка строки

Автор: Fee 26.10.2006 22:13

извините, не могли бы вы помочь решить задачу:
Ввести с клавиатуры символьную строку. Длина строки не более 80 символов. путем пересылки символов из этой строки сформировать три новые строки: S1 - латинские буквы (строчные и прописные), S2 - цифры, S3 - остальные символы. Сформированные строки вывести на экран.

буду очень благодарен!!! give_rose.gif

Автор: Fee 26.10.2006 22:15

Цитата(Fee @ 26.10.2006 18:13) *

извините, не могли бы вы помочь решить задачу:
Ввести с клавиатуры символьную строку. Длина строки не более 80 символов. путем пересылки символов из этой строки сформировать три новые строки: S1 - латинские буквы (строчные и прописные), S2 - цифры, S3 - остальные символы. Сформированные строки вывести на экран.

буду очень благодарен!!! give_rose.gif

компилятор turbo c

Автор: klem4 26.10.2006 22:59

Так пойдет ?

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void)
{
char s[80], s1[80], s2[80], s3[80];

gets(s);

int n = strlen(s), a = 0, b = 0, c = 0;

for (int i = 0; i < n; i++)
if (isalpha(s[i])) s1[a++] = s[i];
else
if (isdigit(s[i])) s2[b++] = s[i];
else
s3[c++] = s[i];

s1[a] = s2[b] = s3[c] = '\0';

puts(s1);
puts(s2);
puts(s3);


return 0;
}

Автор: Fee 26.10.2006 23:22

чет он ошибку выдает на int...

Автор: Fee 26.10.2006 23:25

картинка...


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: volvo 26.10.2006 23:42

klem4, в чистом С нельзя перемешивать описание переменных с кодом, так что придется поменять местами эти 2 строки:

	gets(s);

int n = strlen(s), a = 0, b = 0, c = 0, i; /* и описание переменной i нужно сделать тут же */
, из цикла слово int убери...

Автор: Fee 26.10.2006 23:50

сделал все, как вы сказали:

# include <stdio.h>
# include <string.h>
# include <ctype.h>

int main(void)
{
char s[80], s1[80], s2[80], s3[80];


int n = strlen(s), a = 0, b = 0, c = 0, i;
gets(s);


for (i = 0; i < n; i++)
if (isalpha(s[i])) s1[a++] = s[i];
else
if (isdigit(s[i])) s2[b++] = s[i];
else
s3[c++] = s[i];

s1[a] = s2[b] = s3[c] = '\0';

puts(s1);
puts(s2);
puts(s3);


return 0;
}


запускаю программу... ввожу произвольную строку (что-то типо такого:fjak642jklfaDFdaf754), нажимаю enter и не чего не происходит... просто кидает опять к тексту....

Автор: volvo 26.10.2006 23:52

Нажми Alt + F5 для просмотра результатов...

Автор: Fee 27.10.2006 0:04

за alt+f5 спасибо smile.gif тока она не корректно работает...sad.gif
вот результаты:
fkdja;5423852034


fjsdka;534790%$#



fjaskl543$%fhdsfj


fdjask;fja4535fjdks
fdjaskfjaf
4535
;
fjasdk;lfja928jfdkslja$%#
fjasdklfjajfdks
928
;
fjdkasl453dfsjl%$#
fjdkasldfsjllja
453
%$#


выделенное - то что вводил я...

Автор: klem4 27.10.2006 0:09

Уж не знаю что ты там наменял, у меня все работает нормально :




Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Fee 27.10.2006 0:12

Цитата(klem4 @ 26.10.2006 21:09) *

Уж не знаю что ты там наменял, у меня все работает нормально :

а выложи пожалуйста свой код...

Автор: volvo 27.10.2006 0:21

blink.gif Да оно вообще работать не должно... Здесь длину строки-то вычислять не надо... (обрати внимание, strlen - было ПЕРЕД вводом строки !!!)

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main(void)
{
char s[80], s1[80], s2[80], s3[80];


int a = 0, b = 0, c = 0, i;
gets(s);


for (i = 0; s[i] != '\0'; i++)
if (isalpha(s[i])) s1[a++] = s[i];
else
if (isdigit(s[i])) s2[b++] = s[i];
else
s3[c++] = s[i];

s1[a] = '\0'; s2[b] = '\0'; s3[c] = '\0';

puts(s1);
puts(s2);
puts(s3);


return 0;
}

Автор: Fee 27.10.2006 0:27

VOLVO и KLEM4 боооооооольшое вам спасибо, просто выручили меня...... smile.gif