1 Востаннє редагувалося Volodya (18.12.2012 21:33:46)

Тема: Двовимірний масив та функції. Допоможіть розв'язати задачу будь ласка.

Потрібно написати в Win 32 console application, source file.
У двовимірному масиві записані слова, що представляють собою послідовність цифр, що завершуються 0. Необхідно роздрукувати слова через кому, взявши надрукований рядок у дужки. Довжина друкованого рядка 60 символів. Добування слова оформити у вигляді функції.
     Наприклад:
      вихідні дані - 123023402303450
                                         234450234567010
                                         234455677670450
       результат - (123,234,23,345)(23445,234567,1)(23445567767,45)

Напрацювань немає тому, що нерозумію як реалізувати.
Ось додаткова інформація

Post's attachments

Текстовый документ (2).txt 3.73 kb, 231 downloads since 2012-12-18 

2 Востаннє редагувалося Ярослав (24.11.2016 23:35:27)

Re: Двовимірний масив та функції. Допоможіть розв'язати задачу будь ласка.

#include <iostream> // бібліотеки для вводу/виводу
#include <string> // бібліотека для роботи із типом string
#include <cctype> // бібліотека для функції isdigit()

const int MAX_SIZE=60; // Максимальний розмір для рядка вводу
const int MAX_RESULT_SIZE=1024; // Максимальний розмір нового рядка

void string_transform(std::string &input); // Функція, що змінює рядок

int main()
{
  int i = 0;
  std::string input;
  std::string result;
  std::cout << "Please, enter your string and press Enter, or just press Enter to exit." << std::endl;
  
  do {
    getline (std::cin, input);
    if (input.length() > MAX_SIZE) {
      std::cout << "Your string is too long. The maximum size is " << MAX_SIZE << " characters." << std::endl;
      std::cout << "Please, try again or press Enter to exit." << std::endl;
      continue;
    }
    if ( (result.length() + input.length()) > MAX_RESULT_SIZE) {
        std::cout << "Sorry, but there is no inaf space, try shorter string or press Enter to exit." << std::endl;
        continue;
    }
    if (input.length() == 0) {
        break;
    }
    
    string_transform(input);
    
    result += input;
    
  } while (input != "");
  
  std::cout << result << std::endl;
  
}

void string_transform(std::string &input) {    
    int i;
    std::string buffer;
  
    buffer = "";
    buffer += "(";
    
    for (i = 0; i < input.length(); i++) {
        if (isdigit(input[i]) && input[i] != '0') {
            buffer += input[i];
        } else if (input[i] == '0') {
            buffer += ',';
        }
    }
    
    buffer += ')';
    
    for (i = 0; i < buffer.length(); i++) {
        if (buffer[i] == '(') {
            while (buffer[i+1] == ',') { // erase commas after left brace
                buffer.erase(i+1, 1);
            }
        }
        if (buffer[i] == ',' && buffer[i+1] == ',') {
            while (buffer[i+1] == ',') { // erase multiple commas
                buffer.erase(i+1, 1);
            }
        }
        if (buffer[i] == ',' && buffer[i+1] == ')') {
            buffer.erase(i, 1); // erase commas before right brace
        }
    }
    
    input.clear();
    input = buffer;
}
Білий Лунь