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

Тема в разделе "Другие языки", создана пользователем rafic, 18 апр 2011.

Модераторы: Цукер
  1. rafic

    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 но она там только для виду. Кто может закончить программку?
     
  2. ShoxMaster

    ShoxMaster

    Регистр.:
    3 дек 2008
    Сообщения:
    393
    Симпатии:
    150
    С помощью 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;
    }
    
    Можно убрать код, который читает строку с пробелами и чистит их в конце.
     
    rafic нравится это.
  3. rafic

    rafic

    Регистр.:
    14 май 2008
    Сообщения:
    477
    Симпатии:
    24
    Спасибо!

    А еще было бы идеально если оно работало и с русскими символами если заменить массив с словесными цифрами на:
    ПС, с пробелами разобрался, затупил сначала=)