Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
iluxa1810
13 / 13 / 5
Регистрация: 03.09.2011
Сообщений: 1,026
#1

Убрать лишние пробелы и вывести на экран те строки, где первая буква и последняя буква слова одинаковы - C (СИ)

19.10.2014, 16:20. Просмотров 541. Ответов 5
Метки нет (Все метки)

Есть вот такой код к заданию:
Дана строка с произвольным кол-вом слов и пробелов. Требуется убрать лишние пробелы и вывести на экран те строки, где первая буква и последняя буква слова одинаковы.
Код работает, однако я не могу понять, почему данный код не коверкает исходную строку?
Ведь внутри функции идет постоянное прибавление чисел к исходной строке.
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
41
#pragma hdrstop
#pragma argsused
 
#include <stdio.h>
 
#ifdef _WIN32
#include <tchar.h>
#else
  typedef char _TCHAR;
  #define _tmain main
#endif
#define Maxlength 512
        void modify(char *in, char *out);
int _tmain(int argc, _TCHAR* argv[])
{
        char in[Maxlength],out[Maxlength];
        int i,j;
        for(;;){
                printf(">>");
                if(!gets(in)) break;
                modify(in,out);
                printf(">>%s\n",out);
                printf(">>%s\n",in);
                }
}
 
void modify(char *in, char *out){
        int i=0;
        int l;
        strcpy(out,"");
        while(*(in+=strspn(in," \t"))){
                char fst,lst;
                l=strcspn(in," \t");
                fst=in[0];
                lst=in[l-1];
                if(fst==lst){if (i++) strcat(out, " "); strncat(out,in,l);}
                in+=l;
 
                }
 
        }
Добавлено через 2 минуты
Или что бы все махинации вышли за пределы функции, я должен пометить места, где происходит + звездочкой?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2014, 16:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Убрать лишние пробелы и вывести на экран те строки, где первая буква и последняя буква слова одинаковы (C (СИ)):

Вывести слова, у которых первая и последняя буквы одинаковы, и количество таких слов - C (СИ)
Помогите пожалуйста написать прогу с использованием массивов на С:вывести слова у которых первая и последняя буквы одинаковы и количество...

Найти количество слов, у которых первая и последняя буква совпадают между собой - C (СИ)
Дано n,S1...Sn найти кол - во слов у которых первая и последняя буква совпадают между собой . Помогите исправить ошибки. #include...

Перевести из С++ в СИ. Найти слова, в которых последняя буква не гласная - C (СИ)
Хотелось бы увидеть сие творение на языке СИ, никак не удается самому #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;sstream&gt; ...

Напечатать все слова, в которых первая буква слова входит в него более одного раза. - C (СИ)
Решите пожалуйсто задачу на Си Напечатать все слова, в которых первая буква слова входит в него более одного раза.

Удалить лишние пробелы из строки, а потом вывести те слова, которые имеют четное количество букв - C (СИ)
Было задание: Удалить лишние пробелы из строки, а потом вывести те слова, которые имеют четное кол-во букв. Станартными функциями...

Написать функцию, которая выводит на экран все слова заданной строки, в которой заданная буква входит N или более раз - C (СИ)
Написать функцию, которая выводит на экран все слова заданной строки, в которой заданная буква входит N или более раз. В случае отсутствия...

5
zss
Модератор
Эксперт С++
6928 / 6490 / 2182
Регистрация: 18.12.2011
Сообщений: 17,105
Завершенные тесты: 1
19.10.2014, 16:48 #2
Цитата Сообщение от iluxa1810 Посмотреть сообщение
внутри функции идет постоянное прибавление....
Цитата Сообщение от iluxa1810 Посмотреть сообщение
strcat(out, " "); strncat(out,in,l);}
Это изменяется результирующая строка (out).
Исходная (in) остается неизменной.
0
iluxa1810
13 / 13 / 5
Регистрация: 03.09.2011
Сообщений: 1,026
19.10.2014, 17:12  [ТС] #3
zss, а 31 строчка разве не вносит никакие изменения в исходную?
0
zss
Модератор
Эксперт С++
6928 / 6490 / 2182
Регистрация: 18.12.2011
Сообщений: 17,105
Завершенные тесты: 1
19.10.2014, 17:24 #4
Там просто передвигается копия указателя на строку in.
Копия потому, что указатель передан по значению.
0
iluxa1810
13 / 13 / 5
Регистрация: 03.09.2011
Сообщений: 1,026
19.10.2014, 17:52  [ТС] #5
zss, Т.е , что бы 31 строчка внесла изменения в указатель, нужно передавать его через амперсант?
0
zss
Модератор
Эксперт С++
6928 / 6490 / 2182
Регистрация: 18.12.2011
Сообщений: 17,105
Завершенные тесты: 1
19.10.2014, 20:11 #6
А надо ли?
Как только Вы поменяете указатель, потеряете возможность использовать
выделенную под строку память, в.т.ч. удалить.
Т.е. неизбежна утечка памяти.
0
19.10.2014, 20:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2014, 20:11
Привет! Вот еще темы с ответами:

Вывести слова, в которых буква слова входит в него еще один раз - C (СИ)
Условие: Дана строка. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть...

Если русская буква гласная, то вывести ее на экран - C (СИ)
# include &lt;conio.h&gt; # include &lt;stdio.h&gt; # include &lt;math.h&gt; # include &lt;stdlib.h&gt; # include &lt;time.h&gt; # include &lt;iostream&gt; ...

Удалить из строки все слова в которых есть заданная буква - C (СИ)
Здравствуйте вот у меня задача: Дана строка, содержащая последовательность слов, разделенных пробелами. Удалить из строки все слова в...

Если указанная буква есть в предложении - все слова с ней удалить и вывести оставшиеся - C (СИ)
Добрые день. Наткнулся на задачки, суть которых такова: С клавиатуры вводится предложение 1) если указанная буква есть в...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru