Работа со строками

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Программер Михаил
Сообщения: 1
Зарегистрирован: 07 дек 2010, 16:23

Помогите пожалуйста!!
Надо написать программу на с++. Тема "работа со строками".

Необходимо преобразовать строку таким образом, чтобы сначала в ней были напечатаны только буквы, а потом только цифры, не меняя порядок следования символов.
Вот я тут пробовал написать, но взникает проблема в выводе. Подскажите, пожалуйста, что не верно в моем коде и как это исправить.

Код: Выделить всё

#include <cstdlib>
#include <cstdio>
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
    char a[1000], b[1000],c[1000];
    int i,j;
    cout << "Vvedite stroky ";
    gets(a);
    cout << endl;
    puts(a);
    for(i=0;i<=strlen(a);i++)
    { 
           if((a[i]=='0')||(a[i]=='1')||(a[i]=='2')||(a[i]=='3')||(a[i]=='4')||(a[i]=='5')||(a[i]=='6')||(a[i]=='7')||(a[i]=='8')||(a[i]=='9'))
           c[i]=a[i];
           else
           b[i]=a[i];
    }
    cout << endl;
    for (i=0;i<=strlen(b);i++)
    cout <<b[i];
    system ("pause");
    return 0;
}
JeyKip
Сообщения: 9
Зарегистрирован: 25 окт 2010, 23:57

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

Код: Выделить всё

#include <cstdlib>
#include <cstdio>
#include <string.h>
#include <iostream>
using namespace std;
void main()
{
char a[1000], b[1000],c[1000];
int i,j, cifri=0, bukvi=0;
cout << "Vvedite stroky ";
gets(a);
cout << endl;
puts(a);
int g=strlen(a);
for(i=0;i<=strlen(a);i++)
{
if((a[i]=='0')||(a[i]=='1')||(a[i]=='2')||(a[i]=='3')||(a[i]=='4')||(a[i]=='5')||(a[i]=='6')||(a[i]=='7')||(a[i]=='8')||(a[i]=='9'))
{
	c[cifri]=a[i];
	cifri++;

} else

{
	b[bukvi]=a[i];
	bukvi++;
}
	c[cifri] = '\0';
}
cout<<endl<<b<<endl<<c<<endl;
//for (i=0;i<=strlen(b);i++)
//cout <<b[i];
system ("pause");
} 
Ответить