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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2022, 16:26   #1
farm kripov
 
Регистрация: 07.10.2022
Сообщений: 4
Печаль Задание по строкам в C++.

Задания по строкам выполнить в двух вариантах: со строками как объектами класса
string и как массивами символов.(интересует второй вариант выполнения)

Сформировать предложении S из таких слов предложения S1 и S2, длина которых
меньше самого короткого слова предложения S3. Если таких слов нет, выдать
соответствующее сообщение.
farm kripov вне форума Ответить с цитированием
Старый 28.10.2022, 16:35   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

см. вот это
macomics вне форума Ответить с цитированием
Старый 01.11.2022, 05:08   #3
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Не люблю стандартную функцию strtok, потому что она меняет содержимое исходной строки. Поэтому в strtok нельзя передавать например строковые литералы, или результат glGetString(GL_EXTENSIONS). Я бы делал примерно так:
Код:
#include <iostream>
#include <string.h>

using namespace std;

int shortest_word_len(const char* text) {
  int min_len = 0;
  int pos = 0;
  for (;;) {
    while (text[pos] == ' ') {pos++;} // пропускаем пробелы
    if (text[pos] == '\0') {break;} // если дошли до конца строки
    int word_start = pos;
    pos++;
    while ((text[pos] != ' ') && (text[pos] != '\0')) {pos++;}
    int word_len = pos - word_start;
    if ((min_len == 0) || (word_len < min_len)) {
      min_len = word_len;
    }
  }
  return min_len;
}

void copy_words(char* dest, int* dest_pos, const char* source, int limit_len) {
  int source_pos = 0;
  for (;;) {
    while (source[source_pos] == ' ') {source_pos++;} // пропускаем пробелы
    if (source[source_pos] == '\0') {break;} // если дошли до конца строки
    int word_start = source_pos;
    source_pos++;
    while ((source[source_pos] != ' ') && (source[source_pos] != '\0')) {source_pos++;}
    int word_len = source_pos - word_start;
    if (word_len < limit_len) {
      if (dest != NULL) { // в новых компиляторах можно использовать nullptr
        memcpy(dest + *dest_pos, source + word_start, word_len);
        dest[*dest_pos + word_len] = ' ';
      }
      *dest_pos += word_len + 1;
    }
  }
}

int main() {
  const char* sentence_1 = "  one  ring  ";
  const char* sentence_2 = "  to  rule  them  all  ";
  const char* sentence_3 = "  zero  terminated  strings  ";

  int limit_len = shortest_word_len(sentence_3);
  if (limit_len == 0) {
    cout << "No words in sentence 3." << endl;
    return 0;
  }
  cout << "limit length: " << limit_len << endl;

  // первый проход: считаем длину результата
  int result_pos = 0;
  copy_words(NULL, &result_pos, sentence_1, limit_len);
  copy_words(NULL, &result_pos, sentence_2, limit_len);
  if (result_pos == 0) {
    cout << "No suitable words in sentences 1, 2." << endl;
    return 0;
  }

  char* result = new char[result_pos + 1];
  // второй проход: копируем подходящие слова
  result_pos = 0;
  copy_words(result, &result_pos, sentence_1, limit_len);
  copy_words(result, &result_pos, sentence_2, limit_len);
  result[result_pos] = '\0';

  cout << "result: " << result << endl;
  delete[] result;
  return 0;
}
Вывод на консоль:
Код:
limit length: 4
result: one to all
Пётр Седов вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать коментарии к двум строкам строкам в программе на VBA Yurec2407 Помощь студентам 2 30.01.2015 12:54
написать программу которая вводит по строкам с квеатуры двумерные массивы и вычисляет сумму его элементов по строкам таня99 Паскаль, Turbo Pascal, PascalABC.NET 3 23.05.2012 20:23
Free Pascal!! задание по строкам!! Vika_0_0 Паскаль, Turbo Pascal, PascalABC.NET 17 27.04.2012 20:36
Free Pascal!! задание по строкам!!) Vika_0_0 Паскаль, Turbo Pascal, PascalABC.NET 4 25.04.2012 18:28
Задание по строкам Шардлэйк Помощь студентам 12 10.12.2010 18:41