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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2012, 21:56   #1
nartov55
Пользователь
 
Регистрация: 25.04.2010
Сообщений: 21
Восклицание Строки C++

Задана строка символов, состоящая из цифр и букв. Если количество цифр в строке меньше, чем букв, заменить все цифры их словесными обозначениями (1 – единица, и т.п.).

Если в строке одна цифра, то всё ещё как-то работает. А когда две или более, то вылетает с ошибкой:Debug Assertion Failed! _CrtIsValidHeapPointer( pUserData )

Код:
#include "stdafx.h"
#include <clocale>
#include <conio.h>
#include <iostream>
#include <windows.h>

void change(char*);//Если цифр меньше чем букв, то вызывает shift_insert().
void shift_insert(char*,int,int&);//Меняет цифры на символьные обозначения, со сдвигом строки.

void main()
{
	char *s=(char*)malloc(11);
	strcpy(s,"1asufhgjf");
	change(s);
	printf("%s",s);
	free(s);
}

void change(char *s)
{
	int n=strlen(s),c=0,k=0;
	int *A=(int*)malloc(n);
	for(int i=0;s[i];i++)	
		if((s[i]>47)&&(s[i]<58))
		{
			A[c]=i;
			c++;
		}
	if(c<n-c)
		for(int i=0;i<c;i++)
			shift_insert(s,A[i]+k,k);
	free(A);
}

void shift_insert(char *s, int p, int &k)
{
	int n=0,j=0;
	char *s1="";
	switch(s[p])
	{
	case 48: s1="ноль"; n=4; break;
	case 49: s1="единица"; n=7; break;
	case 50: s1="двойка"; n=6; break;
	case 51: s1="тройка"; n=6; break;
	case 52: s1="четвёрка"; n=8; break;
	case 53: s1="пятёрка"; n=7; break;
	case 54: s1="шестёрка"; n=8; break;
	case 55: s1="семёрка"; n=7; break;
	case 56: s1="восемёрка"; n=9; break;
	case 57: s1="девятка"; n=7; break;
	}
	realloc(s,strlen(s)+n+1);
	for(int i=0;i<n-1;i++)
	{
		for(j=strlen(s);j>p+i;j--)
			s[j+1]=s[j];

		s[j]=s1[i];
	}
	s[j+1]=s1[n-1];
	k+=n;
}

Последний раз редактировалось nartov55; 16.04.2012 в 22:01.
nartov55 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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