c программирование - обращение отдельных слов в строке - PullRequest
0 голосов
/ 27 января 2011
#include<stdio.h>
#include<conio.h>
#include<string.h>
main(){

char *c;
char *y;
int len=strlen(c);
int i,k=0,j,m=0,t;
clrscr();
printf("Enter the string :");
gets(c);
printf("%s",c);
for(i=0;i<=len;i++)
{
    if(c[i]==' '|| c[i]=='\0')
    {
        for(j=i-1;j>=m;j--)
        {
            y[k]=c[j];
            k++;
                        }

                       y[k]=' ';

        m=k;
        k++;

    }

}
y[len]='\0';
for(i=0;i<len;i++)
printf("%c",y[i]);

getch();
}

Эта программа предназначена для перестановки слов в строке, которую я пытаюсь в течение длительного времени. Я думаю, что написанная мной логика верна, и я каждый раз получаю разные результаты ... несколько раз вывод предыдущего выполнения будет добавляться в следующий вывод. может кто-нибудь сказать мне, где ошибка

иногда я получаю правильный вывод с пропуском одной буквы.

еще одна вещь, которую я добавляю, когда я печатаю напрямую "y как массив, который он приходит, если я пытаюсь дать как указатель, он не приходит я имею в виду

Е ( "% s", у); // вывод идет не правильно

для (I = 0; я

я хочу знать точную разницу

Ответы [ 3 ]

2 голосов
/ 27 января 2011

Это:

char *c;
char *y;
int len=strlen(c);

- почти верный рецепт катастрофы: c - неинициализированный указатель, и вы передаете его в strlen. лучший , на который вы можете надеяться, - это немедленный дамп ядра.

Сначала нужно исправить это, если только с помощью kludge:

c = malloc(1000);

Там лучшепути, но, вероятно, уровень квалификации, на который вы нацеливаетесь с этим кодом (не пытаясь оскорбиться там, просто заявляя, что это вещи уровня CS101, где расширенные функции пользовательского ввода, вероятно, не нужны).

1 голос
/ 27 января 2011

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

1 голос
/ 27 января 2011

Я сразу вижу проблемы в том, что вы не инициализируете свои переменные и не выделяете память для строкового буфера.

char *c;
int len=strlen(c);

c в этом случае не инициализируется, и вычисление длины строки, на которую он указывает, приведет к непредсказуемому поведению.

Тогда вы делаете

gets(c);

c должен указывать на некоторую память, выделенную либо malloc с друзьями, либо на массив (например, c[1024]).

y также не инициализируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...