여기 문장이 회문인지 아닌지 확인하고 있습니다. 스택을 학습하는 과정에서이 작업을 수행하고 있습니다.문자열 조작을위한 포인터 사용하기
입력 된 문자의 수가 다음 코드에서 20으로 제한 될 필요가 없도록 문자 배열 대신 포인터를 사용할 수있는 방법이 있습니까? 코드가 정상적으로 작동하지만 성능이나 다른 점이 개선되어야합니까? NULL을 초기화하는 것처럼 스택을 사용하면서 기억해야 할 포인터에 대해 중요한 것이 있습니까? 감사
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct node
{
char data;
struct node *link;
}StackNode;
void insertData(StackNode **);
void push(StackNode **, char);
void checkData(StackNode **);
bool pop(StackNode **,char *);
char sent[20] = "";
void main()
{
StackNode *stackTop;
stackTop = NULL;
insertData(&stackTop);
checkData(&stackTop);
printf("\n");
return;
}
void insertData(StackNode **stackTop)
{
char c;
int len;
printf("Enter the Sentence\n");
while(((c = getchar()) != '\n'))
{
if(((c>='a' &&c<='z') || (c>='A' && c<='Z')))
{
if((c>='A' && c<='Z'))
{
int rem;
rem = c-'A';
c='a' + rem;
}
push(stackTop,c);
len = strlen(sent);
sent[len++]=c;
sent[len]='\0';
}
}
printf("Letters are %s\n\n",sent);
}
void push(StackNode **stackTop,char c)
{
StackNode *pNew;
pNew = (StackNode*) malloc(sizeof(StackNode));
if(!pNew)
{
printf("Error 100:Out of memory\n");
exit(100);
}
pNew->data = c;
pNew->link = *stackTop;
*stackTop = pNew;
}
void checkData(StackNode **stackTop)
{
char c;
int i=0;
while(pop(stackTop,&c))
{
if(c !=sent[i++])
{
printf("Not palindrome");
return;
}
}
printf("Palindrome");
}
bool pop(StackNode **stackTop,char *c)
{
StackNode *pNew;
pNew = *stackTop;
if(pNew == NULL)
return false;
*c = pNew->data;
*stackTop = pNew->link;
printf("char poped %c\n",*c);
free(pNew);
return true;
}
코드의 아무 곳에서나 문자 배열이 없으며 20 자의 제한도 없습니다.질문은 코드와 관련이없는 것처럼 보입니다. – interjay
귀하의 질문은 귀하의 코드와 일치하지 않는 것 같지만 배열 대신 항상 포인터를 사용할 수 있습니다. – mah
죄송합니다. 지금 확인해주십시오. – IRock