Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2009, 17:20   #1
papoose
Пользователь
 
Регистрация: 19.01.2009
Сообщений: 10
По умолчанию Удаление символов в строке.

Добрый вечер. Необходимо реализовать такое задание на Си.
Введите слово в переменную типа строка, распечатайте слово, исключая из него каждый раз поочередно то две первых, то две последних буквы, например, слово '1234567890' будет распечатано в виде: 1234567890
34567890 345678 5678 56;
По-моему, код я написал правильный.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char* s;
    char* s1;
    int i,j;
    s=(char*)malloc(10*sizeof(char));
    gets(s);
    i=0;
    while (s)
    {
        if ((i%2)==0)
        {
            j=strlen(s);
            j=j-2;
            if (j>0)
            {
                s1=(char*)malloc(j*sizeof(char));
                strncpy(s1,s,j);
                strcpy(s,s1);
                free(s1);
                i++;
                puts(s);
            }
            else s=NULL;
        }
        else
        {
            j=strlen(s);
            j=j-2;
            if (j>0)
            {
            s1=(char*)malloc(j*sizeof(char));
                strcpy(s1,(s+2));
                strcpy(s,s1);
                free(s1);
                puts(s);
                i++;
            }
            else s=NULL;

        }
    }
    return 0;
}
Но при вводе критического значения символов в первую строку (s=10), появляются непонятные символы, и возникает ощущение, что я куда-то не туда записываю )) помогите пожалуйста, если можете.
papoose вне форума Ответить с цитированием
Старый 03.06.2009, 18:13   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Ну вот так как-то. Сократил немного.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

int main()
{
char* s;
char* s1;
int i,j;
s=(char*)malloc(10*sizeof(char));
gets(s);

j = strlen(s);
i=0;
while(j>2)
 {
  j-=2;
  s1 = (char*)malloc((j+1)*sizeof(char));
  if(i==0) { strncpy(s1,s,j); i=1; }
  else { strcpy(s1,(s+2)); i=0; }
  strcat(s1,"\0");
  strcpy(s,s1);
  puts(s);
  free(s1);
  j = strlen(s);
 }
 free(s);
getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 03.06.2009, 18:25   #3
papoose
Пользователь
 
Регистрация: 19.01.2009
Сообщений: 10
По умолчанию

не совсем работает...введите 10 символов, там на третьей\четвертой строке неправильно операция реализуется
papoose вне форума Ответить с цитированием
Старый 03.06.2009, 18:34   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Да, действительно.. А обязательно через доп. строку?
Такое прокатит?
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

int main()
{
char* s;
int i,k,j,len;
s=(char*)malloc(10*sizeof(char));
gets(s);

i=0;
k=2;
j = 0;
len = strlen(s);
while(k<len)
 {
  if(i%2==0) { s[len-k] = 0; puts(j+s); j+=2; k+=2;}
  else puts(s+k-2);
  i++;
 }
 free(s);
getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 03.06.2009, 18:41   #5
papoose
Пользователь
 
Регистрация: 19.01.2009
Сообщений: 10
По умолчанию

Нечто подобное я тоже писал )) да препод мутный, непонятно что он потребует, но вроде как желательно использование функций работы со строками )) Может все таки поможет кто нибудь...
papoose вне форума Ответить с цитированием
Старый 03.06.2009, 18:54   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А если вот так?
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

int main()
{
char *s, *s1;
int i,j,len;
s=(char*)malloc(10*sizeof(char));
gets(s);

len = strlen(s);

i=0;
j=0;
while(len>2)
 {
  len -= 2;
  s1 = (char*)malloc((len+1)*sizeof(char));
  if(i%2==0)
   {
    strncpy(s1,s+j,len);
    s1[len]=0;
   }
  else
   {
    j+=2;
    strncpy(s1,s+j,len);
    s1[len] = 0;
   }
  puts(s1);
  free(s1);
  i++;
 }


free(s);
getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 03.06.2009, 19:10   #7
papoose
Пользователь
 
Регистрация: 19.01.2009
Сообщений: 10
По умолчанию

Благодарю, работает!) еще такой вопрос:когда встает вопрос о подсчете количестве одинаковых букв в слове, то тут сразу в голове возникает простой алгоритм сравнения символов (юзая строку как массив). Какие нибудь другие способы есть, без юзания массивов?
papoose вне форума Ответить с цитированием
Старый 03.06.2009, 19:17   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от papoose
еще такой вопрос:когда встает вопрос о подсчете количестве одинаковых букв в слове, то тут сразу в голове возникает простой алгоритм сравнения символов (юзая строку как массив). Какие нибудь другие способы есть, без юзания массивов?
Ну, собственно, строка и есть массив символов. Поэтому как ни крутись, а с массивами вы будете иметь дело.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 03.06.2009, 19:22   #9
papoose
Пользователь
 
Регистрация: 19.01.2009
Сообщений: 10
По умолчанию

ну я это и имел ввиду )) окей, спасибо еще раз ))
papoose вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование символов в строке ZeroQl Помощь студентам 12 17.02.2009 23:06
Нахождение серий символов в строке ampolez Общие вопросы C/C++ 2 19.12.2008 22:20
Количество символов в строке Ivan357 Паскаль, Turbo Pascal, PascalABC.NET 0 09.12.2008 17:06
Удаление гласных, согласных, цифровых символов в строке <zeroql> Паскаль, Turbo Pascal, PascalABC.NET 9 27.11.2008 08:05
Вывод символов в строке Karl_Karlovi4 БД в Delphi 12 03.06.2008 13:31