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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2015, 16:25   #1
Nastya_19
Новичок
Джуниор
 
Регистрация: 06.09.2015
Сообщений: 1
По умолчанию Разбить строку

Здравствуйте, подскажите, пожалуйста, как разбить строку, состоящую из точек и чисел на массив этих чисел?
У меня программа правильно выводит массив всех чисел кроме последнего, последним выводится какое-то большое отрицательное число вместо того что нужно, не могу найти ошибку.
Вот код:

Код:
#include<iostream>
using namespace std;

int main()
{
	const int N = 10;
	char maska[N];

	cout << "maska: ";
	cin >> maska;
	char separator = '.';
	int counter = 0;
	for (int i = 0; i < N; ++i)
		if (maska[i] == '.') counter++;

	int* numbers=new int[counter + 1];
	int k = -1;
	int n = 0;
	char* a = new char[n];
	for (int i = 0; i < N; ++i)
	{

		if (maska[i] != '.')
		{	
			a[n] = maska[i];
			n++;
		}
		else
		{
			n = 0;
			numbers[++k] = atoi(a);
		}
	}
	numbers[counter+1] = atoi(a);
	for (int i = 0; i < counter+1; ++i)
		cout << numbers[i] << endl;

	return 0;
}

Последний раз редактировалось Stilet; 06.09.2015 в 17:29.
Nastya_19 вне форума Ответить с цитированием
Старый 06.09.2015, 17:30   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
как разбить строку, состоящую из точек и чисел на массив этих чисел?
Рекомендую: http://www.programmersforum.ru/showthread.php?t=214478
В strtok укажешь символ точки
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.09.2015, 18:23   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Лобовая атака. Вы не делаете проверку на конец строки. Код выдаёт данные до первого встретившегося нуля.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 06.09.2015, 19:22   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Код очень странный.
Код:
char separator = '.';
завели переменную, но в коде нигде не пользуете её.
Код:
for (int i = 0; i < N; ++i)
		if (maska[i] == '.') counter++;

	int* numbers=new int[counter + 1];
В цикле посчитали количество точек и на основе этого количества выделили массив под числа.
Код:
int n = 0;
	char* a = new char[n];
Создаётся массив нулевой размерности и в него потом что-то еще и записывается.
Код:
numbers[counter+1] = atoi(a);
numbers имеет размерность counter+1 (последний элемент с индексом counter), т.е. тут пишете уже за предел выделенной памяти и никто не знает какую память там затираете.
pu4koff вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбить строку der90 PHP 4 18.02.2014 22:02
Разбить строку redenemy Общие вопросы C/C++ 1 29.05.2012 01:06
разбить строку Ceprey Общие вопросы C/C++ 10 24.12.2009 20:47
C++: разбить строку на подстроки apromix Помощь студентам 2 04.10.2009 01:07
Разбить строку на 2 части 7KByte Общие вопросы C/C++ 6 31.05.2009 16:51