Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
iluxa1810
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
#1

Убрать лишние пробелы и вывести на экран те строки, где первая буква и последняя буква слова одинаковы

19.10.2014, 16:20. Просмотров 548. Ответов 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
Ответы с готовыми решениями:

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

Найти количество слов, у которых первая и последняя буква совпадают между собой
Дано n,S1...Sn найти кол - во слов у которых первая и последняя буква совпадают...

Перевести из С++ в СИ. Найти слова, в которых последняя буква не гласная
Хотелось бы увидеть сие творение на языке СИ, никак не удается самому #include...

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

Функция: определить, встречается ли в слове X первая буква слова Y
2) Есть еще задачка: Напишите функцию для определения, встречается ли в слове...

5
zss
Модератор
Эксперт С++
7097 / 6628 / 4196
Регистрация: 18.12.2011
Сообщений: 17,474
Завершенные тесты: 1
19.10.2014, 16:48 #2
Цитата Сообщение от iluxa1810 Посмотреть сообщение
внутри функции идет постоянное прибавление....
Цитата Сообщение от iluxa1810 Посмотреть сообщение
strcat(out, " "); strncat(out,in,l);}
Это изменяется результирующая строка (out).
Исходная (in) остается неизменной.
0
iluxa1810
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
19.10.2014, 17:12  [ТС] #3
zss, а 31 строчка разве не вносит никакие изменения в исходную?
0
zss
Модератор
Эксперт С++
7097 / 6628 / 4196
Регистрация: 18.12.2011
Сообщений: 17,474
Завершенные тесты: 1
19.10.2014, 17:24 #4
Там просто передвигается копия указателя на строку in.
Копия потому, что указатель передан по значению.
0
iluxa1810
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
19.10.2014, 17:52  [ТС] #5
zss, Т.е , что бы 31 строчка внесла изменения в указатель, нужно передавать его через амперсант?
0
zss
Модератор
Эксперт С++
7097 / 6628 / 4196
Регистрация: 18.12.2011
Сообщений: 17,474
Завершенные тесты: 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

Удалить лишние пробелы из строки, а потом вывести те слова, которые имеют четное количество букв
Было задание: Удалить лишние пробелы из строки, а потом вывести те слова,...

Написать функцию, которая выводит на экран все слова заданной строки, в которой заданная буква входит N или более раз
Написать функцию, которая выводит на экран все слова заданной строки, в которой...

Вывести слова, в которых буква слова входит в него еще один раз
Условие: Дана строка. Группы символов, разделенные пробелами (одним или...


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

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

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