Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > программа по удалению пробелов на СИ!


Автор: barboss 1.6.2009, 16:26
 помогите пожалуйста(((
написала программу по удалению пробелов. а она, зараза, не работает. вот вроде по логике все должно, а все равно зацикливает и не могу понять почему(
оговорка
1- на си. и 2- код подразумевает, что студент, т.е. я) знает только вводную главу и еще не знаком с функциями кроме ввода-вывода и указателями(

вот код:

#include<stdio.h>
#include <string.h>
int main()
{
    int const n=256;
    int i=0,j=0,flag=0;
    char str[n];
    
printf("please input your string\n");
    fgets(str,256,stdin);
    if(str[0]!='\n' && str[0]!=' ')
     flag=1;
        
    else if(str[0]==' ' && str[0]!='\n')
        flag=0;

    
    for(i=1;str[i]!='/n';i++){
        if (str[i]!=0 && flag==1){
            while(str[i]=str[i+1])
                i++;}
        else if(str[i]==' ' && flag==0){
            i=j;
            while(str[j]=str[j+1])
                j++;}
     }
    putchar(str[i]);
    putchar(' ');
    
    
}

Автор: Dmi3ev 1.6.2009, 16:37
я бы написал функцию для этого дела, типа этой
Код

char* delspaces (char* s)
{
    char *res=new char[mystrlen(s)+1];
    char *b=res;
    while (*s)
    {
        if (*s!=' ')
        {
            *res=*s;
            res++;
            s++;
        }
        else
            s++;
    }
    *res='\0';
    res=b;
    return res;
}

Автор: barboss 1.6.2009, 16:44
дело в том. что в этой программе нельзя использовать указатели и функции кроме ввода-вывода((
поэтому я там ввела два флага и написала два цикла типа при флаге 1 и при флаге 0. по идее цикл при флаге 1 у меня должен просто сканировать символы до момента пока на попадет на пробел и флаг не станет ноль, ка ктолько флаг нудевой, то он должен  сдвигать все правые символы влево до тех пор пока не встретит флаг 1.но он зацикливает и ничего не выводит в результате.

Автор: Dmi3ev 1.6.2009, 16:52
Код

int main()
{
    char s[]="it's my string!";
    char res[256];
    int k=0;
    for (int i=0; i<strlen(s); i++)
        if(s[i]!=' ')
            res[k++]=s[i];
    res[k]='\0';
    printf("%s \n", res);
    system("pause");
    return 0;
}

Автор: barboss 1.6.2009, 16:58
так всек просто оказывается)) спасибо!!!!! smile 

Автор: Dmi3ev 1.6.2009, 17:07
Цитата

так всек просто оказывается)) спасибо!!!!!

пожалуйста! удачной сессии!

Автор: barboss 1.6.2009, 17:41
это не сессия это нам в школе задают)) одна задачка в классе и 4 на дом))

Автор: zim22 1.6.2009, 17:55
Цитата(barboss @  1.6.2009,  17:41 Найти цитируемый пост)
это не сессия это нам в школе задают

какой класс? первый? smile

Автор: barboss 3.6.2009, 09:22
Ну типа того)) подготовительный)) smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)