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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2012, 15:37   #1
Polly0819
 
Регистрация: 11.11.2012
Сообщений: 8
По умолчанию Строки(С)

Добрый день. Нужно в заданной строке найти все строчные буквы и поместить их в массив. У меня выводит какой то один символ,в чем ошибка?
Код:
int _tmain(int argc, _TCHAR* argv[])
{
	char elem=0,len;
	char S[]="BhaDfo";
	len=strlen(S);
	
	
	int i=0,p=0;
	int j=0;
	elem=0;
	if (S[i]>='a' && S[i]<='z')
		{elem++; //подсчет количества элементов для выделения памяти в массиве
	i++;
}
	char *M;
	M=(char*)calloc(elem,sizeof(char));
	p=0;
	for (i=0;i<len;i++)
	{if(S[i]>='a' && S[i]<='z')
	M[p]=S[i];
	p++;}
	printf("%c",M[p]);

Последний раз редактировалось Stilet; 11.11.2012 в 16:03.
Polly0819 вне форума Ответить с цитированием
Старый 11.11.2012, 15:47   #2
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

Ну подсчёт количества элементов как минимум нужно делать в цикле.
У вас:
Код:
if (S[i]>='a' && S[i]<='z')
{elem++; //подсчет количества элементов для выделения памяти в массиве
i++;
}
изначально i=0. Вы проходите по вашему If только один раз, т.е сравниваете только первый символ. т.е elem у вас или 0 или 1. Отсюда и захват памяти неправильный.
Код:
for (int j = 0; j < len; j++)
{
   if (S[j]>='a' && S[j]<='z')
   {
      elem++; //подсчет количества элементов для выделения памяти в массиве
    }
}
вот примерно так будет правильно.
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com

Последний раз редактировалось kventin_zhuk; 11.11.2012 в 15:49.
kventin_zhuk вне форума Ответить с цитированием
Старый 11.11.2012, 16:00   #3
Polly0819
 
Регистрация: 11.11.2012
Сообщений: 8
По умолчанию

Отлично,спасибо большое,теперь выводится хоть что то,правда совсем не то,что нужно. Выводится нужное количество символов,но 3 из них одинаковы.

Вот подкорректированный код
Код:
for (i=0;i<len;i++)
	{
	if (S[i]>='a' && S[i]<='z')
	{elem++;}
	
}
	char *M;
	M=(char*)calloc(elem,sizeof(char));
	for (i=0;i<len;i++)
	{
		if(S[i]>='a' && S[i]<='z')
		M[p]=S[i];		p++;
	}
	for (p=0;p<elem;p++)
	printf("%c",M[p]);
	 char c;
     scanf("%c", &c);scanf("%c", &c);
получается ahaa

Последний раз редактировалось Stilet; 11.11.2012 в 16:23.
Polly0819 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Сделать в гриде строки выше, чтобы не растягивать строки до бесконечности kris__tina БД в Delphi 1 09.06.2011 15:31
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10