Помогите дописать на С++

rafic

Местный житель
Регистрация
14 Май 2008
Сообщения
477
Реакции
24
Задача: Запросить у пользователя текст. Найти в нем числа, записанные словами, и записать их арабскими цифрами. Например: "Присутствовало тридцать восемь человек" -> "Присутствовало 38 человек". Ограничиться двузначными числами.
было бы в си ф-ция типа str_replace как в пых, было бы вообще идеально, но я такой не нашел... и прошу помощи. Вот что я наваял...
Код:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	const int count=11;
	char *stringIN;
	stringIN = (char*) malloc(400);
	char *DBStringEN[count]= {"zero","one","two","three","four","five","six","seven","eight","nine", "ten"};
	char *DBNumber[count]= {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
	cin >> stringIN;
	for(int i=0; i < count; i++){
		stringIN = str_replace(DBStringEN[i], DBNumber[i], stringIN);
	}
	cout << stringIN << endl;
	system("pause");
	return 0;
}
В коде есть желаемая функция str_replace но она там только для виду. Кто может закончить программку?
 
С помощью STL:
Код:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
	string stringIN;
	char* Buffer=new char[255];
	const unsigned short COUNT=11;
	string DBStringEN[COUNT]= {"zero","one","two","three","four","five","six","seven","eight","nine", "ten"};
	string DBNumber[COUNT]= {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
	cin.getline(Buffer, 255);//Чтобы читало с пробелами
	stringIN=Buffer;
	for(int i = 0; i < COUNT; i++)
		  for(unsigned index=0; index=stringIN.find(DBStringEN[i], index), index!=std::string::npos;)
		  {
			stringIN.replace(index, DBStringEN[i].length(), DBNumber[i]);
			index+=DBNumber[i].length();
		  }
	stringIN.erase(std::remove_if(stringIN.begin(), stringIN.end(), isspace), stringIN.end());//убиваем пробелы
	cout << stringIN << endl;
	//system("pause");
	return 0;
}
Можно убрать код, который читает строку с пробелами и чистит их в конце.
 
Спасибо!

А еще было бы идеально если оно работало и с русскими символами если заменить массив с словесными цифрами на:
string DBStringEN[COUNT]= {"ноль","один","два","три","четыре","пять","шесть","семь","восемь","девять", "десять"};

ПС, с пробелами разобрался, затупил сначала=)
 
Назад
Сверху