Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
1

Разделение строки пробелами

10.05.2015, 21:45. Показов 2080. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо считать из файла слова, те что длинее MAX_LEN разделить пробелами на слова длиной NEW_LEN и менее, не могу найти ошибку в программе, помогите плз!

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX_LEN 5
#define NEW_LEN 3
 
char *func (char *str);
 
int main (void) {
    FILE *fin, *fout; int len, n_sp, i;
    char filename1[256], filename2[256], str1[256], str2[256];
    printf("Type the input file name: ");
    scanf("%s", filename1);
    fin = fopen(filename1, "r");
    if (!fin) return -1;
    printf("Type the output file name: ");
    scanf("%s", filename2);
    fout = fopen(filename2, "w");
    while (fscanf(fin, "%s", str1) == 1) {
        if (strlen(str1) <= MAX_LEN)
            fprintf(fout, "%s ", strdup(str1));
        else {
            len = strlen(str1);
            n_sp = (int)(len / NEW_LEN);
            for (i = 0; i < n_sp; i++) {
                if (i == 0)
                    memmove(str2, str1, NEW_LEN);
                else
                    memmove(str2 + i*(NEW_LEN+1), str1 + i*(NEW_LEN), NEW_LEN);
            }
            for (i = 1; i < (len+n_sp); i++)
                str2[i*NEW_LEN] = ' ';
            fprintf(fout, "%s ", strdup(str2));
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2015, 21:45
Ответы с готовыми решениями:

Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить местоположение символа первой строки
Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить местоположение символа первой...

Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать три символа второй строки к первой
Заданы 2 строки, состоящие из слов, разделенных пробелами. Приписать три символа второй строки к...

Ввод строки с пробелами
Нужна помощь!Как сделать так,чтобы после нажатия на пробел программа не заканчивала ввод в строку,а...

Ввод строки с пробелами
Я искал насчет этого в поиске и прочитал про get gets getline fgets, так и не понял. Кто то может...

4
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
10.05.2015, 22:26 2
1) for (i = 0; i < n_sp; i++) обрабатывает число символов кратное NEW_LEN. Если число символов NEW_LEN не кратно (скажем, равно четырем) то опаньки...
2) В str2 не вписан завершающий нулевой символ.
3) Код не имеет никакого отношения к C++, это чистый C.
4) И вообще, вот так не проще?
C++
1
2
3
4
5
6
7
8
9
10
11
12
const int MAX_LEN=5,NEW_LEN=3;
std::ifstream stream("in.txt");
std::string word;
while(stream>>word)
{
    if(word.size()>MAX_LEN)
        for(int pos=0;pos<word.size();++pos)
            cout<<(!pos || pos%NEW_LEN?"":" ")<<word[i];
    else
        cout<<word;
    cout<<endl;
}
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
10.05.2015, 22:52  [ТС] 3
Цитата Сообщение от Renji Посмотреть сообщение
1) for (i = 0; i < n_sp; i++) обрабатывает число символов кратное NEW_LEN. Если число символов NEW_LEN не кратно (скажем, равно четырем) то опаньки...
2) В str2 не вписан завершающий нулевой символ.
3) Код не имеет никакого отношения к C++, это чистый C.
4) И вообще, вот так не проще?
Вы правы, это чисты С, С++ я практически не знаю, просто в теме по С мне долго никто не отвечал, я и решил написать и тут. В Вашем коде не совсем понимаю 8-ю строчку, не могли бы Вы обьяснить ее? или переписать на чистом С? заранее благодарю
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
10.05.2015, 22:59 4
Цитата Сообщение от ZimOne Посмотреть сообщение
В Вашем коде не совсем понимаю 8-ю строчку, не могли бы Вы обьяснить ее?
Если позиция символа кратна NEW_LEN и символ не является самым первым в слове, то печатаем пробел+символ. Иначе - только символ. У меня печать идет на консоль, печать в файл, думаю, сами сделать сможете.
0
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 84
10.05.2015, 23:13  [ТС] 5
Исправил, теперь все работает, спасибо!
0
10.05.2015, 23:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2015, 23:13
Помогаю со студенческими работами здесь

Ввод строки с пробелами
Всё, сдаюсь. Ребят, подскажите, пожалуйста, как строку с пробелами считать int main (){...

Ввод строки с пробелами
Собственно вот текст, не хочет никакими функциями принимать строку stud.fio с пробелами, испробовал...

Парсинг строки с пробелами
Вообщем на выходе всего я получаю вот это : Вот сам файл script.csx: script ...

Считывание строки с пробелами
Ситуация такая, необходимо с консоли прочитать строку вводимую пользователем вместе с пробелами. ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru