@watch_dog

Упражнение из Страуструпа. Преобразование числового представления цифры в строковое и наоборот?

Задание звучит так: создайте вектор, хранящий десять строковых значений "zero", "one", "., "nine". Используйте его в программе, преобразующей цифру в соответствующее строковое представление: например, при вводе цифры 7 на экран должна быть выведена строка seven. С помощью этой же программы, используя тот же цикл ввода, преобразуйте строковое представление цифры в числовое: например, при вводе строки seven на экран должна быть выведена цифра 7.
Преобразование из числа в строку
#include<iostream>
#include<vector>
#include<string>
using namespace std;

int main() {
	vector<string> v = { "zero","one","two","three","four","five","six","seven","eight","nine" };



	for (int i = 0; cin >> i;) {
		cout << v[i];
	}

	return 0;
}


Преобразование из строки в число
#include<iostream>
#include<vector>
#include<string>
using namespace std;

int main() {
	vector<string> v = { "zero","one","two","three","four","five","six","seven","eight","nine" };



	for (string i = " "; cin >> i;) {
		for (int s=0; s < v.size(); ++s){
			if (v[s] == i) {
				cout << s;
			}
}	
		
	}
	return 0;
}

Как я понял нужно было использовать во втором коде, тот же for что и в первоми и он должен быть один. Как сделать строго по заданию?
  • Вопрос задан
  • 571 просмотр
Решения вопроса 2
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Для начала не ходить по чужой памяти, если пользователь введёт 15, то вероятнее всего будет сегфолт, но не факт.
Первое:
#include <iostream>
#include <vector>

using std::cout;
using std::cin;
using std::endl;

int main()
{
    std::vector<std::string> numbers = {
        "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"
    };
    int value;
    while (cin >> value) {
        if (value >= 0 && value < numbers.size())
            cout << numbers.at(value) << endl;
    }

    return 0;
}

второе:
#include <algorithm>
#include <iostream>
#include <vector>

using std::cout;
using std::cin;
using std::endl;

int main()
{
    std::vector<std::string> numbers = {
        "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"
    };
    std::string value;
    while (cin >> value) {
        auto it = std::find(numbers.begin(), numbers.end(), value);
        if (it != numbers.end())
            cout << std::distance(numbers.begin(), it) << endl;
    }

    return 0;
}
Ответ написан
Комментировать
@batallador
Можно так:
#include <iostream>
#include <vector>


std::vector<std::string> digit{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

int main() 
{
  int oneD;
  std::string inStr;
  
  while (std::cin >> inStr) {

    if (inStr.length() < 2) {
      try {
        oneD = stoi(inStr);
      }
      catch (...) {
        continue;
      }
      std::cout << std::endl << digit[oneD] << std::endl;

    } else {

      for (auto iter = 0; iter < digit.size(); iter++) {
          
        if (digit[iter] == inStr) {
          std::cout << std::endl << iter << std::endl;
          continue;

        }
      }

    }

  }

  return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы