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

Работа со строкой - C++

Восстановить пароль Регистрация
 
R1se
0 / 0 / 0
Регистрация: 05.02.2012
Сообщений: 13
28.02.2012, 00:50     Работа со строкой #1
Задача:
Дана строка, содержащая последовательность слов, разделен-
ных пробелами, и натуральное число, не меньшее длины этой
строки и не большее 255 (иначе выдать сообщение об ошиб-
ке). Привести строку к длине, задаваемой этим числом, путем
введения дополнительных пробелов между словами. Если
строка содержит одно слово, выдать сообщение об ошибке.
Запнулся над забиванием пробелами между словами.
Что уже есть:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
 
using namespace std;
 
// Ñ÷åò÷èê ñëîâ
int wordCounter(char* str)
{
    int w=0,begin = -1;
 
    for(int i=0;str[i];i++)
    {
       if(begin == -1)
       {
          if(str[i]!=' ') begin = i;
       }
       else if(str[i]==' ')
       {
          w++;
          begin = -1;
       }
    }
    if(begin!=-1) w++;
 
    return w;
}
 
int main()
{
    printf("=================================================[Settlement Graphic Work N2]===");
    printf("[Note!] Line can not consist of one word.\n");
 
    char str[255];
 
    while(1)
    {
        printf("Enter a string: ");
        gets(str);
        int w = wordCounter(str);
        if(w<=1)
        {
            printf("[Error!] Check the condition and try again.\n");
        }
        else break;
    }
 
    int s = strlen(str);
 
    printf("[Note!] The length of the converted string should be in the range from %d to 255.",s);
    int n = 0;
    while(1)
    {
        printf("Enter the length of new line: ");
        scanf("%d",&n);
        if(n<=s || n>=255) printf("[Error!] Check the condition and try again.\n");
        else break;
    }
 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2012, 00:50     Работа со строкой
Посмотрите здесь:

C++ Работа со строкой
Работа со строкой C++
Работа со строкой C++
Работа с командной строкой... C++
работа со строкой C++
Работа со строкой C++
C++ работа со строкой
C++ Работа с текстовой строкой

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
28.02.2012, 02:08     Работа со строкой #2
R1se, да уж пришлось попотеть(вроди и задание лёгкое а как-то никак не шло, наверное потому что поспать надо бы)
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
int main()
{
    long i;
    long nSpace    = 1;//Начальное число пробелов между словами
    long nAdd      = 0;//Число добавляемых пробелов
    long nWords    = 0;
    long number    = 256;
    long length    = 0;
    char text[256] = {0};//Раз уж речь зашла о 255 значит памяти в строке должно быть не меньше
    char sbuf[256] = {0};//Буффер строки
    char * str     = 0;
    printf("Enter text : ");
    scanf("%[^\n]",text);//Ввели исходный текст
    length = strlen(text);//Узнали длинну текста
    printf("Enter number : ");
    scanf("%u",&number);
    if(number < length || 255 < number)
        printf("Error of input number\n");
    else
    {
        strcpy(sbuf,text);//Скопировали строку в буффер
        str = strtok(text," ");//Извлекаем из строки первое слово
        while(str)
        {
            nWords = nWords + 1;//Считаем число слов
            str = strtok(NULL," ");
        }
    
        while(length < number)
        {
            nAdd = (number - length)/(nWords - 1);
            if(nAdd < 1)
                nAdd = 1;
            nSpace = nSpace + nAdd;
            str = strtok(sbuf," ");//Извлекаем из строки первое слово
            text[0] = '\0';
            while(str)
            {
                strcat(text,str);
                for(i = 0; i < nSpace; i++)
                    strcat(text," ");
                str = strtok(NULL," ");
            }
            length = strlen(text) - nSpace;
            text[length] = '\0';
            strcpy(sbuf,text);
        }
        printf("Transfrmed string : %s\n",text);
    }
    printf("Press any key to continue\n");
    getch();
    return 0;
}
Миниатюры
Работа со строкой  
Питекантроп
 Аватар для Питекантроп
246 / 140 / 6
Регистрация: 14.06.2010
Сообщений: 340
28.02.2012, 05:18     Работа со строкой #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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "stdio.h"
int main(int argc, char* argv[])
{
        char buf[256], new_buf[256];
        printf("Input str\n");
        gets(buf);
        int req_len, i;
        printf("Input req len\n");
        scanf("%i",&req_len);
        int len = 0;
        char * b = buf;
        if (buf[0]) while (buf[++len]);
 
        if (req_len > 255) printf("str len is great %i\n",255);
        if (req_len > len)
        {
                char * b = buf, * nb = new_buf;
                char prev = ' ';
                int cnt_words = 0;
                while (*b)
                {
                        if (*b != ' ' && prev == ' ') ++cnt_words;
                        prev = *(b++);
                }
                if (--cnt_words == 0)
                {
                        printf("only 1 word\n");
                        return 0;
                }
                int delta_p = (req_len - len) / cnt_words,
                        mod = (req_len - len) % cnt_words;
 
                b = buf;
                while (*b == ' ') *(nb++) = *(b++);
                prev = 'x';
                while (*b)
                {
                        if (*b != ' ' && prev == ' ')
                        {
                                if (cnt_words-- == mod) ++delta_p;
                                for (i = 0; i < delta_p; ++i)
                                        *(nb++) = ' ';
                        }
                        prev = *(nb++) = *(b++);
                }
                *nb = 0;
        }
        else if (req_len == len) printf("str len is equal %i\n",req_len);
        else printf("str len less %i\n",req_len);
 
        int new_len = 0;
        while (new_buf[++new_len]);
        printf("new string:\n%s\n",new_buf);
        printf("new len %i\n",new_len);
 
        getchar();
        getchar();
        return 0;
}
Добавлено через 9 минут
-=ЮрА=-, кстати, если в ваш вариант ввести текст "33 33 33 33", а длину 12, то результат получается несколько сомнительным
Yandex
Объявления
28.02.2012, 05:18     Работа со строкой
Ответ Создать тему
Опции темы

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