Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Работа со строками

Ответить
Настройки темы
C/C++ - Работа со строками

Аватара для Anastasiya9kmmr

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


В общем не могу дописать программу использовала ее изначально как шаблон(задания на словах очень похожие) и пытаюсь менять под свои условия но не получается, условия ниже.
Написать программу, обрабатывающую введенный пользователем текст, состоящий из слов, записанных через пробелы. Длина текста не больше 255 символов. В тексте могут быть использованы любые символы. Словом считать последовательность символов, не содержащую пробел. Необходимо введенный текст вывести на экран до и после его преобразования, сформировать новую строку, в которую включены слова по возрастанию их длин. Найти первое цифровое слово и изменить его значение, поделив на 100.








Цитата:
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 255
#define is_space(c) ((c) == ' ' || (c) == '\t')

char* mul_numbers(size_t max_size, char* s, int n);

int main(void){
int N;
char c;
char s[N];
printf("vvedite slova \n");
scanf("%[^\n]%*c",&s);
printf("vivod \n");
puts( mul_numbers(N, s, 100) );
return 0;
}






char* mul_numbers(size_t max_size, char* s, int n){
char* p;
int c, i = 0, d = 0, x = 0, y = 0;
size_t l = strlen(s);
char* t = s;
do {
c = *s;
if(c && !is_space(c)){
if(c >= '0' && c <= '9'){
x = x/10 + (c - '0');
++d;
}
++i;
} else if(i > 0){
if(i == d){
x *= n;
i = 0;
c = x;
y = 1;
do {
++i;
y *= 10;
} while((c /= 10) != 0);

p = s - d;
i -= d;
if((l + i) >= max_size)
break;

if(i > 0)
memmove(p + i, p, l - (size_t)(p - t));
s += i - 1;
l += i;

c = x;
y /= 10;
do {
*p++ = (char)(c / y % 10) + '0';
} while((y /= 10) != 0);
}
i = d = x = 0;
}
} while(*s++ != '\0');
return t;
}

Отправлено: 06:56, 05-07-2019

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Anastasiya9kmmr, используйте более "говорящие" переменные и комментируйте код.
Для того, чтобы сторонний человек понял работу функции mul_numbers надо очень сильно постараться.
При попытке расставить отступы, чтобы добраться хотя бы до структуры, и от ее строения понять выполняемую логику, возникло подозрение.
PHP код: Выделить весь код

if(0)
memmove(ip- (size_t)(t));
+= 1;
+= i

В этих строках нет пропущенных фигурных скобок (составного оператора) ?
Далее не разбирал.
Прошу добавить комментариев и пояснить смысл действий, и дать более "говорящие" названия переменным, или при объявлении рассказать что за что отвечает.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 12:58, 05-07-2019 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Anastasiya9kmmr

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


lxa85,
Цитата lxa85:
Anastasiya9kmmr, используйте более "говорящие" переменные и комментируйте код.
Для того, чтобы сторонний человек понял работу функции mul_numbers надо очень сильно постараться.
При попытке расставить отступы, чтобы добраться хотя бы до структуры, и от ее строения понять выполняемую логику, возникло подозрение.
PHP код:
if(i*>*0)
memmove(p*+*i,*p,*l*-*(size_t)(p*-*t));
s*+=*i*-*1;
l*+=*i;
В этих строках нет пропущенных фигурных скобок (составного оператора) ?
Далее не разбирал.
Прошу добавить комментариев и пояснить смысл действий, и дать более "говорящие" названия переменным, или при объявлении рассказать что за что отвечает. »
Так?
PHP код: Выделить весь код

#include <stdio.h>

#include <string.h>
#define MAX_SIZE 255
#define is_space(c) ((c) == ' ' || (c) == '\t')

charslova(size_t max_sizecharsint n);

int main(void)
{
    
int N;
    
char c;
    
char s[N];
    
printf("vvedite slova \n");
    
scanf("%[^\n]%*c",&s);
    
printf("vivod \n");
    
putsslova(Ns100) );
return 
0;
}
//Все цифровые слова увеличить в n раз.
  
charslova(size_t max_sizecharsint n)
{
  
charp;
  
int c0000;
  
size_t l strlen(s);
  
chars;
     do
{
= *s;
if(
&& !is_space(c))


{
if(
>= '0' && <= '9')


{
   
x/10 + ('0');
   ++
d;
}
   ++
i;

   else if(
0)
{
    if(
== d)
{
        
*= n;
        
0;
        
x;
        
1;
    do

    ++
i;
    
*= 10;
}

while((
/= 10) != 0);
       
d;
       
-= d;
       if((
i) >= max_size)
  break;

       if(
0)
       
memmove(ip- (size_t)(t));
       
+= 1;
       
+= i;
       
x;
       
/= 10;
       do
{
    
  *
p++ = (char)(10) + '0';


   while((
/= 10) != 0);
}

   
0;
}

}

   while(*
s++ != '\0');
      return 
t;
    



Отправлено: 13:47, 05-07-2019 | #3


Старожил


Сообщения: 208
Благодарности: 51

Профиль | Отправить PM | Цитировать


автор, Ваши лабораторные давно решены. Причем ежегодно решаются заново.

Отправлено: 13:49, 05-07-2019 | #4


Аватара для Anastasiya9kmmr

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


птичка0001,
Цитата птичка0001:
автор, Ваши лабораторные давно решены. Причем ежегодно решаются заново. »
Откуда такая уверенность? Лично не нашла такой же задачи.

птичка0001,
Цитата птичка0001:
автор, Ваши лабораторные давно решены. Причем ежегодно решаются заново. »
Откуда такая уверенность? Лично не нашла такой же задачи.

Отправлено: 14:33, 05-07-2019 | #5


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Anastasiya9kmmr, с одной стороны легче, с другой - последовательность действий остается загадкой.
Распишите алгоритм словами, как если бы рассказывали решение другу.
Что надо найти в первую очередь, как понять что это слово, и т.д.
Мне все еще не ясны манипуляции с буквами s, c, p, d, y, l однобуквенных переменных, без указания описания очень много.
Переменные ясны для вас, как для автора, но не для того, кто читает. И т.к. код нельзя прочесть, сложно сказать, допущена в рассуждениях ошибка или нет.
Или ошибка в выражении мыслей в терминах языка.

птичка0001, дидактические материалы по алгебре то же давно решены, но это не значит, что надо придумывать каждый раз новые задачи, а ученики и студенты вместо обучения должны искать и списывать готовые ответы.

PHP код: Выделить весь код

[q=Anastasiya9kmmr]if(i*>*0)
memmove(p*+*i,*p,*l*-*(size_t)(p*-*t));
s*+=*i*-*1;
l*+=*i;
c*=*x;
y*/=*10; [post=2878308]»[/post][/q

Сейчас по условию i>0 выполняется, только только строка memmove().
Остальные выполняются всегда.
Вопрос. Это правильно? Или по условию i>0 должны выполняться строки

"
s+= i - 1;
l += i;
c = x;
" ?
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:54, 05-07-2019 | #6


Аватара для Anastasiya9kmmr

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата lxa85:
Anastasiya9kmmr, с одной стороны легче, с другой - последовательность действий остается загадкой.
Распишите алгоритм словами, как если бы рассказывали решение другу.
Что надо найти в первую очередь, как понять что это слово, и т.д.
Мне все еще не ясны манипуляции с буквами s, c, p, d, y, l однобуквенных переменных, без указания описания очень много.
Переменные ясны для вас, как для автора, но не для того, кто читает. И т.к. код нельзя прочесть, сложно сказать, допущена в рассуждениях ошибка или нет.
Или ошибка в выражении мыслей в терминах языка.
птичка0001, дидактические материалы по алгебре то же давно решены, но это не значит, что надо придумывать каждый раз новые задачи, а ученики и студенты вместо обучения должны искать и списывать готовые ответы.
PHP код:
Цитата Anastasiya9kmmr:
if(i*>*0)
memmove(p*+*i,*p,*l*-*(size_t)(p*-*t));
s*+=*i*-*1;
l*+=*i;
c*=*x;
y*/=*10;*»
Сейчас по условию i>0 выполняется, только только строка memmove().
Остальные выполняются всегда.
Вопрос. Это правильно? Или по условию i>0 должны выполняться строки
"
s+= i - 1;
l += i;
c = x;
" ? »

Вообще до этого момента как я поняла программа думает что за слова она берет из ввода и если это число, то начинает с ним манипуляции если нет, то скидывает вниз на вывод. Отчищаются переменные и по новой пока не закончаться слова. По моему все так и работает, а переменные про которые вы говорите это как раз те в которые записываются символы, разве нет? Честно говоря пересмотрела уже всё как мне кажется особенно после слов птички от как это должно выполняться, разного рода подобные задачи но увы.

Отправлено: 16:09, 05-07-2019 | #7


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Цитата Anastasiya9kmmr:
Честно говоря пересмотрела уже всё как мне кажется особенно после слов птички от как это должно выполняться, разного рода подобные задачи но увы. »
Та-а-ак стоп! Вот с этого момента - стоп!
Если сейчас продолжиться анализ чужого мнения (а код, это запись чужих мыслей), то я в этом не участвую.
Мне абсолютно не интересно кто и как решил эту задачу. Если изначальный код - чужой, и вы пытаетесь понять как он работает - это тупиковая ветка.
Вы пытаетесь понять чью-то чужую, явно извращенную логику.
У вас есть своя голова и свои мысли.
Поэтому вы берете чистый лист, и решаете задачу так, как если бы ее решали вы. Не птичка, не сосед дядя Коля, не лучшая подруга, а самостоятельно.
Причем первый шаг - именно словесный.
Никакого С++, никаких высоких материй; простыми словами, так, как вы бы объяснили ребенку.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:56, 05-07-2019 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Работа со строками

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - работа со строками, а именно редактирование строк в текстовом файле Vlad_705 Скриптовые языки администрирования Windows 7 20-10-2014 17:26
[решено] Работа со строками и циклами eus_deus AutoIt 15 12-09-2013 08:23
Разное - [решено] Работа со строками txt файла. kirillgoogle Программирование и базы данных 16 26-06-2012 14:00
VBA - Работа со строками zena Программирование и базы данных 5 21-02-2011 09:03
CMD/BAT - [решено] Работа со строками в cmd-файлах melato Скриптовые языки администрирования Windows 3 30-01-2007 08:52




 
Переход