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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2016, 08:07   #1
Fyn
 
Регистрация: 26.11.2016
Сообщений: 7
По умолчанию Работа со строкой. Язык[СИ]

Задание: Если в строке встречаются подряд два числа, разделенные запятыми – n1,n2, то последующий фрагмент из n2 символов повторяется n1 раз. Если встречается одно число, то n1 раз повторяется символ, например, aaa4,3abcdef преобразуется в aaaabcaabcabcabcdef.

То что сделал я: написал функцию наполовину. Выполняется проверка кол-ва чисел через запятую в строке, затем в случае одного числа уходит в case 0, в случае двух чисел.

Весь код программы:
Код:
#include <stdio.h> // Файл заголовков для библиотеки ввода-вывода 
#include <iostream> 
#include <conio.h> // Подключение _getch() 
#include <locale.h> // Подключение setlocale 
#include <cstdio> // Подключенине фенкции gets - считывание сроки 
#include <cstring> // Подключении функция для обработки строк 
#include <string.h> 
#include <windows.h> 
#include<memory.h> 
#include<time.h> 

void proverka(char str[],char exit[]) 
{ 
int n1,n2=-1,z=0,i,ind,q; 
for (i = 0;str[i] != '\0';i++) 
{ 
if (str[i] >= '0'&&str[i] <= '9') 
{ 
n1=str[i]; 
ind=i; 
} 
if (str[i+1] == ',' && (str[i+2] >= '0'&&str[i+2] <= '9')) 
{ 
n2 = str[i+2]; 
} 
} 
if(n2!=-1) z=1; 
switch (z) 
{ 
case 0: 
for (i = 0; str[i] != '\0'; i++) 
{ 
if(i!=ind) 
{ 
exit[i]=str[i]; 
} 
else 
{ 
for (q = 0;q<n1;q++) 
{ 
exit[i+q]=str[i+1]; 
} 
} 
} 
break; 
case 1: 
printf("Аллах не един"); 
break; 
} 
} 


void main() 
{ 
SetConsoleCP(1251); 
SetConsoleOutputCP(1251); 
char str[40],exit[40]; 
printf("Введите строку: "); 
gets_s(str); 
proverka(str,exit); 
printf(exit); 

_getch(); 
}
Еще один вариант case 0:
Код:
for (i = 0,j=0; str[i] != '\0'; i++) 
{ 
size=len-ind-n1; 
if(i<ind) 
{ 
exit[j]=str[i]; 
continue; 
} 
if(i==ind) 
{ 
exit[j]=str[i+1]; 
continue; 
} 
if (i>(ind + n1)) 
{ 
for (h = 0;h<size;h++) 
{ 
exit[j++] = str[i]; 
} 
} 
if(i>ind) 
{ 
for(q=0;q<n1;q++) 
{exit[j++]=str[i+1];} 
} 
} 
break;

И еще один вариант:
Код:
for (i = 0,j=0; str[i] != '\0'; i++) 
{ 
size=len-ind-n1; 
if(i<ind) 
{ 
exit[j]=str[i]; 
continue; 
} 
if(i==ind) 
{ 
exit[j]=str[i+1]; 
continue; 
} 
if (i>(ind + n1)) 
{ 
for (h = 0;h<size;h++) 
{ 
exit[j++] = str[i]; 
} 
} 
if(i>ind) 
{ 
for(q=0;q<n1;q++) 
{exit[j++]=str[i+1];} 
} 
} 
break;
Еще один вариант:
Код:
for (i = 0,j=0;i != ind;i++)
		{
			exit[j]=str[i];
			if((i+1)==ind){
			j++;
			i=i+2;
			exit[j]=str[ind+1];
			}
		}
		for (q=0;q<n1;q++,j++)
		{
			exit[j]=allah;
		}
		for (i, j;i != '\0';i++, j++)
		{
			exit[j+1]=str[i];
		}
Примерный вариант работы программы:

Последний раз редактировалось Вадим Мошев; 10.12.2016 в 11:49.
Fyn вне форума Ответить с цитированием
Старый 10.12.2016, 12:18   #2
olej.tsil
Заблокирован
 
Регистрация: 29.11.2016
Сообщений: 215
По умолчанию

Цитата:
Сообщение от Fyn Посмотреть сообщение
Примерный вариант работы программы:
Содержательно
olej.tsil вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с строкой ATL PHP 2 17.11.2011 22:33
Работа со строкой в С++ X_RaY Помощь студентам 1 10.10.2011 18:27
Язык Си. Записать в **а, адрес пременной одной строкой. Yaskovich Помощь студентам 3 06.03.2010 14:51
Язык С. Редактирование вводимых символов. работа с строкой radion_80 Помощь студентам 1 18.12.2009 01:30
Язык С. Редактирование вводимых символов. работа с строкой (не пойму) radion_80 Помощь студентам 3 04.12.2009 10:38