Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
ElegantLady
0 / 0 / 1
Регистрация: 31.05.2013
Сообщений: 28
1

Проверка условия: являются ли оба символа пробелами

24.06.2013, 23:27. Просмотров 972. Ответов 10
Метки нет (Все метки)

Есть программа на С++

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
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
 
using namespace std;
 
// Проверка условия: являются ли оба символа пробелами
bool BothAreSpaces(char c1, char c2)
{
return c1 == ' ' && c2 == ' ';
}
 
int main()
{
string s;
// Читаем строку
getline(cin, s);
// Ищем первый непробел
string::size_type pos1 = s.find_first_not_of(' ');
// Ищем последний непробел
string::size_type pos2 = s.find_last_not_of(' ') + 1;
string s1;
// Копируем часть s от pos1 до pos2 в s1, удаляя последовательно идущие символы, удовлетворяющие условию
unique_copy(s.begin() + pos1, s.begin() + pos2, back_inserter(s1), BothAreSpaces);
// Выводим результат
cout « s1 « endl;
}
Переведите,пожалуйста,ее просто на Си
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2013, 23:27
Ответы с готовыми решениями:

Определить являются ли оба эти символа латинскими буквами
Всем программистам Hello_World! Помогите написать программу С клавиатуры вводятся 2 символа....

Определить являются ли оба эти символа латинскими буквами
С клавиатуры вводятся 2 символа. Определить являются ли оба эти символа латинскими буквами. Ответ...

Заданы два целых числа. Определить являются ли они оба четными или оба нечетными или какое из них четное, а какое нечетное.
помогите пожалуйста составить программу и блок-схему в Pascal. Заданы два целых числа. Определить...

Внутри проверки условия не производится ещё одна проверка условия
Как задумывалось - при нажатии на джойстик просто должны были остановится движки, но если при...

Почему при выполнении данного кода выполняются оба условия?
Здравствуйте!!! подскажите знающие люди почему при выполнении данного кода выполняются оба условия....

10
Vourhey
Почетный модератор
6496 / 2271 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
25.06.2013, 00:35 2
без проверок
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<string.h>
 
int main()
{
    char s[1024], *c1, *c2, dst[1024], *dst_p;
    fgets(s, 1024, stdin);
    c1 = s; c2 = s + strlen(s);
    while(*c1++ != ' ');
    while(*c2-- != ' ');
    --c1; dst_p = dst;
    while(c1++ != c2)
        if((*c1 != ' ') || (*(c1-1) != ' '))
            *dst_p++ = *c1;
    *dst_p = '\0';
    printf("%s\n", dst);
}
0
xtorne21st
интересующийся
305 / 276 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
25.06.2013, 02:48 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <stdio.h>
 
#define GUESS_MAX_LINE_LENGTH 1024
 
int main(void)
{
    char line[GUESS_MAX_LINE_LENGTH], ch;
    int index, state = 0;
 
    for (index = 0; (ch = getchar()) && ch != '\n' && ch != EOF; )
    {
        if (!state && ch == ' ')
        {
            state = 1;
            line[index++] = ch;
        }
        else if (ch != ' ')
        {
            if (state)
            {
                state = 0;
            }
            line[index++] = ch;
        }
    }
    line[index] = '\0';
    printf("%s\n", line);
}
Добавлено через 12 минут
Цитата Сообщение от Vourhey Посмотреть сообщение
без проверок
происходит "затерание" и результат неверный.

Добавлено через 1 час 38 минут
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include<string.h>
 
int main()
{
    char s[1024], *c1, *c2, dst[1024], *dst_p;
    fgets(s, 1024, stdin);
    c1 = s; c2 = s + strlen(s);
    while(*c1++ == ' ');
    while(*c2-- == ' ');
    --c1; dst_p = dst;
    while(c1++ != c2)
    {
        if((*c1 != ' ') || (*(c1-1) != ' '))
            *dst_p++ = *(c1-1);
    }
 
    *dst_p = '\0';
    printf("%s\n", dst);
}
0
Vourhey
Почетный модератор
6496 / 2271 / 185
Регистрация: 29.07.2006
Сообщений: 12,534
25.06.2013, 10:02 4
Цитата Сообщение от xtorne21st Посмотреть сообщение
затерание
Во-первых, слова "затЕрание" нет. Как, собственно, и самого "затирания". Во-вторых, программа, которую я написал, выполняет не то, что программ ТС, потому что я не внимательно прочитал ее код, учитывая, что ТС еще поленилась написать задание, ибо заданий "скопируйте строку между пробелами тут полно.". Правильнее было указать на это, раз уж взялся рассматривать чужой код. Ей нужен аналог trim. Все то же самое, только другие условия.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
#include<string.h>
 
int main()
{
    char s[1024], *c1, *c2, dst[1024], *dst_p;
    c1 = s+2;
    fgets(c1, 1022, stdin);
    c2 = c1 + strlen(c1) - 2;
    while(*c1++ == ' ');
    while(*c2-- == ' ');
    c1-=2; ++c2; dst_p = dst;
    while(c1++ != c2)
        if((*c1 != ' ') || (*(c1-1) != ' '))
            *dst_p++ = *c1;
    *dst_p = '\0';
    printf("%s\n", dst);
}
@xtorne21st, твой код работает неправильно. Он не убирает лишний пробел в начале строки. И не убирает лишний пробел в конце строки.
2
xtorne21st
интересующийся
305 / 276 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
25.06.2013, 15:15 5
@Vourhey, да я ж без претензий, к тому же вы сами написали что код ваш не проверен. Я лишь хотел обратить внимание, что результат работы программы неверный и даже попытался его исправить, но так как была ночь, немного накосячил. В целом, результат моей работы я расцениваю как удовлетворительный, потому что своими действиями побудил вас должным образом ответить на пост
1
Napster7c6
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 9
27.06.2013, 11:07 6
А можно ли при написании кода на Си, сделать вставку на С++ (как ассемблерную)? Проблема в том, что код на Си уже достаточно большой (переписывать не вариант),и нужная вставка на С++ тоже громоздкая и написана не мной (разбираться долго и сложно)
0
ВАСИЛЕВС
559 / 482 / 168
Регистрация: 14.02.2012
Сообщений: 1,561
27.06.2013, 11:28 7
Цитата Сообщение от Napster7c6 Посмотреть сообщение
А можно ли при написании кода на Си, сделать вставку на С++ (как ассемблерную)?
Нет, это разные по уровням языки. Сначала был С, а потом на его основе был сделан С++. Можно этот код на С++ оформить в форме dll и потом грузить из нее.
0
Napster7c6
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 9
27.06.2013, 11:41 8
а как оформить в dll? собственно на С++ несколько нужных файлов
Или что можно почитать на эту тему?
0
ВАСИЛЕВС
559 / 482 / 168
Регистрация: 14.02.2012
Сообщений: 1,561
27.06.2013, 11:56 9
Создание DLL
Dynamic-Link Library: Теория + Практика для RAD Studio
0
Napster7c6
0 / 0 / 0
Регистрация: 03.03.2011
Сообщений: 9
27.06.2013, 13:04 10
как я поняла, dll - это динамическая библиотека, она линкуется во время выполнения, и делает это операционная система. А тут программа пишется под железо, для МК. Можно сделать статическую библиотеку как-нибудь?
0
xtorne21st
интересующийся
305 / 276 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
27.06.2013, 16:07 11
@Napster7c6, может также линковаться во время компиляции
0
27.06.2013, 16:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2013, 16:07

Заданы два числа. Являются ли они оба чётными?
Заданы два числа. Являются ли они оба чётными?помогите с паскалём, пожааалуйста((

Как отобразить кнопку только тогда, когда оба условия выполнены
Доброе время суток! как правильно написать что бы только тогда когда userd1 = userd2 и sts1 =...

Чтение строки из файла от символа и между пробелами
Добрый день форумчане! Нужна помощь в чтении текста с файла. Текст с файла: 00R005~2388 2187...


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

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

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