Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2012, 23:57   #1
garethspurs
Новичок
Джуниор
 
Регистрация: 05.12.2012
Сообщений: 2
По умолчанию Замена чисел в строке

условие задачи. в строке заменить все числа на введенное с клавиатуры.
вот мой код
#include<iostream>
using namespace std;
void main()
{
char *s=new char[100], *s1=new char[100];
char *cnum=new char[6];
cin.getline(s,100);
cin.getline(cnum,6);
int i,j,m;
i=j=0;
while(s[i])
{
while(!isdigit(s[i]))
s1[j++]=s[i++];
while(isdigit(s[i]))
++i;
m=0;
while(cnum[m])
s1[j++]=cnum[m++];
}
s1[j]=0;

cout<<s1;
}
в общем то и вся беда что он не работает. просто вылетает. ситуация немножко изменяется к лучшему если в while написать не isdigit, а s[i]>='0' && s[i]<='9', тогда на консоль выводится правильный вариант строки всегда, но в некоторых случаях программа потом закрывается
garethspurs вне форума Ответить с цитированием
Старый 06.12.2012, 00:38   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

нету проверки выхода за границу массива
Smogg вне форума Ответить с цитированием
Старый 06.12.2012, 00:46   #3
garethspurs
Новичок
Джуниор
 
Регистрация: 05.12.2012
Сообщений: 2
По умолчанию

так вроде и не выходит за границу.
а как эту проверку сюда записать грамотно?
garethspurs вне форума Ответить с цитированием
Старый 07.12.2012, 12:30   #4
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от garethspurs Посмотреть сообщение
так вроде и не выходит за границу.
Компьютер "вроде" не понимает. Чем и хорош, на самом деле)

Computers are like Old Testament gods; lots of rules and no mercy. ©

Один вариант:
Код:
while((s[i]) && (i<100))
{
...
++i;
...
}
второй:
Код:
while(s[i]))
{
...
++i;
if (i < 100) break;
...
}
basic_istream::getline
В общем, в справке сказано, что результат вполне может и не терминироваться нулевым символом.

Так же проверьте и все прочие циклы на невыход за границы. Иначе - ошибка доступа за границы выделенного блока памяти и вылет.

И последнее замечание, по поводу понимания задания:
число !=цифра.
Smogg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена символа в строке! Leximus Общие вопросы Delphi 2 12.12.2011 13:13
Замена слов в строке lpofigistl Общие вопросы C/C++ 1 16.05.2010 20:38
замена символов в строке euhenia Помощь студентам 3 30.11.2009 20:59
ассемблер, замена символа в строке tiger Помощь студентам 3 05.11.2009 15:25
замена элементов в строке _llllllllll_ Помощь студентам 4 18.10.2009 10:01