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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2020, 19:18   #1
Боярышник
Новичок
Джуниор
 
Регистрация: 26.05.2020
Сообщений: 1
По умолчанию Ввод строки с условием остановки

Здравствуйте, пишу лабораторную работу по обработке строки.
Задание: ввести массив символов-разделителей заданной пользователем длины, после этого ввести строку символов, длина которой неизвестна. Признаком окончания ввода строки является превышение суммарной длины всех слов в строке лимита, ранее введенного пользователем (то есть не включая разделители).
Если введенная строка начинается и заканчивается на разделитель, то поменять в строке первые два слова местами, сохраняя разделители на своих местах. (слово - это символы от разделителя до другого разделителя)
Написала первую часть - ввод символов-разделителей и ввод строки. Почему-то ввод строки заканчивается раньше, чем сумма слов превысит лимит. Не понимаю почему. Например, ввожу символы-разделители: , . /
Ввожу lim: 5
Ввожу строку: ,abc.d/I,
То, что должно выйти в итоге : ,abc.d/I
То, что выходит: ,abc
Код:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <malloc.h>
#include <windows.h>



int main()
{
setlocale(LC_ALL, "");
int lim, lenght=0, sum=0, size;
int i,j,k;
char *str = NULL;
char *Arr_razd = NULL;
char ch, c;
//ВВОД ЭЛЕМЕНТОВ МАССИВА СИМВОЛОВ-РАЗДЕЛИТЕЛЕЙ
printf("\nВведите количество символов-разделителей: \t", size);
scanf("%d", &size);
printf("\nВведите символы-разделители\t");
Arr_razd=(char*)malloc(size*sizeof( char));
for(j=0; j<size; j++)
{
printf("\n[%d]", j );
scanf("%c", &Arr_razd[j]);
ch=getchar();
}

//ВВОД МАКСИМАЛЬНОЙ СУММАРНОЙ ДЛИНЫ ВСЕХ СЛОВ В СТРОКЕ
printf("\nВведите максимальную длину всех слов в строке: \t", lim);
scanf("%d", &lim);


//ВВОД СТРОКИ С УСЛОВИЕМ ОСТАНОВКИ
printf("\nВведите строку, символ за символом\t");
do{
c = getc(stdin);
str = (char*)realloc(str, (lenght+1)*sizeof(char));
str[lenght]= c;
for(int i=0; i<lenght; i++)
{
for(int j=0; j<size; j++)
{
if(Arr_razd[j]==str[i])
{
k=0;
j=size;
}
else
{
k=0;
k++;
}

}
sum=sum+k;
j=0;

}
lenght=lenght+1;

}while(sum<lim);
if(sum==lim)
{
str=(char*)realloc(str, (lenght+1)*sizeof(char));
str[lenght]='\0';
}
printf("Исходная строка: %s\n", str);
return 0;

}
Боярышник вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста. Задание такое: написать макросы для перевода числа в строку, для вывода строки на терминал, для остановки программы. Код приведен ниже. Укажите пожалуйста что Нести Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 01.11.2016 09:26
Программа на языке "Ассемблер" - ввод строки, анализ длины строки, добавление точки в конец строки Алексей_2012 Помощь студентам 1 05.04.2012 11:26
Макрос: копирование строки с условием MaxxVer Microsoft Office Excel 9 05.12.2011 21:54
Ввод с клавиатуры без остановки программы ActioNs Общие вопросы C/C++ 1 25.12.2008 04:40