|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
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; } |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите пожалуйста. Задание такое: написать макросы для перевода числа в строку, для вывода строки на терминал, для остановки программы. Код приведен ниже. Укажите пожалуйста что | Нести | 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 |