Форум программистов, компьютерный форум CyberForum.ru

[C++] Объявление строк - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
_ben_
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 4
30.11.2011, 16:16     [C++] Объявление строк #1
Дана строка символов, состоящая из произвольного текста, слова разделены пробелами. Разбить исходную строку на две подстроки, причем первая длиной k символов (если на k-ю позицию попадает слово, то его следует отне-сти ко второй строке).
Помогите плиз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2011, 16:16     [C++] Объявление строк
Посмотрите здесь:

C++ Объявление массива
C++ Объявление typedef
C++ Предварительное объявление
C++ Объявление структур C++
Объявление функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
30.11.2011, 16:28     [C++] Объявление строк #2
Цитата Сообщение от _ben_ Посмотреть сообщение
Дана строка символов, состоящая из произвольного текста, слова разделены пробелами. Разбить исходную строку на две подстроки, причем первая длиной k символов (если на k-ю позицию попадает слово, то его следует отне-сти ко второй строке).
Помогите плиз
Я подумал, как же лучше сделать вашу задачу, и, похоже, нашел оптимальное решение. Используйте функцию strtok. Она будет последовательно вам находить слова в исходной строке. Если длина найденного слова плюс позиция строки, в которую это слово надо записать, больше или равно k, то процесс формирования второй строки на этом заканчивается.
При этом для первой строки надо будет постоянно перемещать исходную строку на найденное слово, которое было скопировано во вторую строку.

То есть вам надо будет использовать функции strtok, strcpy и strcat . Функция strlen вам не нужна, так как длину сова можно рассчитать, взяв разность указателей.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
30.11.2011, 16:49     [C++] Объявление строк #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <string.h>
#include <ctype.h>
    
#define FIELD_WIDTH 10
#define STR_LEN 256
#define STR_MASK "%255[^\n]%*c"
    
int main(void){
    char str[STR_LEN];
    
    while ( printf("String: ") && scanf(STR_MASK, str) == 1 ){
        if ( strlen(str) < FIELD_WIDTH )
            printf("2short!\n");
        else {
            char * p;
            for ( p = str + FIELD_WIDTH; p > str && ! isspace(*p); --p )
                ;
            if ( p == str )
                printf("Mission imposible!\n");
            else {
                *p = '\n';
                printf("Result:\n%s\n", str);
            }
        }
    }
    
    return 0;
}
_ben_
0 / 0 / 0
Регистрация: 30.11.2011
Сообщений: 4
30.11.2011, 18:22  [ТС]     [C++] Объявление строк #4
Ой, забыл указать, в С++ надо(
Сыроежка
Заблокирован
01.12.2011, 19:30     [C++] Объявление строк #5
Цитата Сообщение от _ben_ Посмотреть сообщение
Дана строка символов, состоящая из произвольного текста, слова разделены пробелами. Разбить исходную строку на две подстроки, причем первая длиной k символов (если на k-ю позицию попадает слово, то его следует отне-сти ко второй строке).
Помогите плиз написать в C++

Добавлено через 2 часа 5 минут
Помогите кто пожалуйста
Несколько некорректная формулировка задачи. Если первая строка имеет длину k символов, то позиции в ней нумеуются от 0 до k-1. А учитывая то, что строка должна завершаться нулевым символом, то для данных отведены позиции лишь от 0 до k-2. Поэтому правильно формулировать задачу так: если на k-1 позицию попадет слово, то есть не пробел, то его отнести ко второй строке.

Пусть есть исходная строка s и две строки s1 и s2. Тогда алгоритм простой. Я его набрасал с учетом того, что вам нельзя пользоваться стандартными строковыми функциями за исключением std::strlen

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
unsigned int len = std::strlen( s );
 
unsigned int len1 = k - 1;
if ( s[k-1] != ' ' )
{
   unsigned int i = k;
   for ( ; i != 0; i-- )
   {
      if ( s[i-1] == ' ' ) break;
   }
   len1 = i;
}
 
if ( len1 == 0 )
{
   std::cout << "The string can not be splitted\n";
}
else
{
   unsigned int i = 0;
   for ( ; i < len1; i++ ) s1[i] = s[i];
   s1[i] = '\0';
   for ( ; i < len; i++ ) s2[i-len1] = s[i];
   s2[i] = '\0';
   std::cout << "s1 = " << s1 << std::endl;
   std::cout << "s2 = " << s2 << std::endl;
}
Можете его взять за основу для написания вашей программы.
Yandex
Объявления
01.12.2011, 19:30     [C++] Объявление строк
Ответ Создать тему
Опции темы

Текущее время: 14:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru