Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Sunman
56 / 56 / 14
Регистрация: 02.03.2010
Сообщений: 407
1

Строки в С

20.12.2010, 21:22. Просмотров 1005. Ответов 2
Метки нет (Все метки)

Господа, помогите! Осталось одно задание, но я никак не могу понять как его сделать.
Суть задания: Вводится, строка, с разделителями( двойными, тройными..пробелами и прочими разделителями (разделители передаются функции в качестве аргумента)), нужно удалить все разделители(оставив по одному пробелу между словами) и вывести строку в обратном порядке.

Я уже, что только не пробовал и через strtok и через strcpy, ну не получается никак, то где-то с адресами лажа, то копирует слова в исходном порядке. Кодом к сожалению не могу похвастать, сейчас с другой машины.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2010, 21:22
Ответы с готовыми решениями:

Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки
Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки...

Добавить строки, начиная со строки К1 и до строки К2, в динамический массив строк
Есть динамический массив строк. Заполняется, т.е. размер его уже известен будет. Но дальше нужно...

Удалить строки динамической матрицы, начиная со строки К1 и до строки К2
Сформировать динамический двумерный массив, заполнить его случайными числами и удалить строки,...

Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка содер-жится в ней
Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой...

Вычислить длину введенной строки и вывести символы строки с четными индексами
Напишите программу, которая требует ввода строки с клавиатуры. Программа вычисляет длину строки и...

2
accept
4833 / 3255 / 455
Регистрация: 10.12.2008
Сообщений: 10,569
21.12.2010, 10:16 2
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
#include <stdio.h>
 
int func(char *s, const char *d, const char *newsep);
 
int main(void)
{
    char line[100] = "abcdfe!@rfkls!@#jdf1!@#234";
    
    if (func(line, "!@#$%^&*()", " ") == 0)
        printf(".%s." "\n", line);
    
    return 0;
}
 
#include <stdlib.h>
#include <string.h>
 
int func(char *s, const char *d, const char *newsep)
{
    char *p, *scp;
    char firsttime;
    
    if ((scp = malloc(strlen(s) + 1)) == NULL)
        return -1;
    *scp = '\0';
    firsttime = 1;
    for (p = strtok(s, d); p != NULL; p = strtok(NULL, d)) {
        if (firsttime)
            firsttime = 0;
        else
            strcat(scp, newsep);
        strcat(scp, p);
    }
    strcpy(s, scp);
    free(scp);
    return 0;
}
Код
[guest@localhost tests]$ ./t
.abcdfe rfkls jdf1 234.
[guest@localhost tests]$
Добавлено через 2 часа 39 минут
переполнение может быть, если подать длинный разделитель
слова, разделённые таким разделителем, вылезут за край исходной строки, ну и памяти той
1
-=ЮрА=-
Заблокирован
Автор FAQ
24.12.2010, 13:54 3
Лучший ответ Сообщение было отмечено Sunman как решение

Решение

Это мой взгляд на проблему, решил обрабатывать строку без С-ных функций
Память под тсроку выделяется динамически поэтому её длина может быть любой...
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
#include <windows.h>
#include <stdio.h>
 
int sLen = 0;
char * str = (char *)malloc(sizeof(char));
char * enter_sring(int &m, char * str, char ch_end);
 
void main()
{
    str = enter_sring(sLen, str, '\n');
    for(int i = sLen - 1;0 <= i; i--)
    {
        printf("%c",str[i]);
        while(str[i] == ' ' && 0 <= i)
            i--;
    }
    printf("\r\n");
}
 
char * enter_sring(int &m, char * str, char ch_end)
{
    if(str != NULL)
    {
        m = 0;
        while((str[m] = getchar()) != ch_end)
        {
            m   = m + 1;
            str = (char *)realloc(str,(m + 1)*sizeof(char));
        }
        str[m] = '\0';
    }
    return str;
}
1
Миниатюры
Строки в С  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2010, 13:54

Как первые два символа строки переставить в конец этой строки?
Собственно вопрос

Найти среднее арифметическое каждой строки матрицы и отсортировать строки по возрастанию
Дана квадратная матрица. Найти среднее арифметическое каждой строки и отсортировать строки по...

Функция перезаписывает символы строки заданным количеством символов другой строки
Программа работает. Но не совсем правильно. В конечной строке появляются непонятные символы,...


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

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

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