프로그래밍 문제를 연습하고 인기있는 "문자열의 역 단어"문제를 코딩하려고했습니다.문자열의 단어를 뒤집어 쓰는 C 코드의 버그
나는 C로 자신 만의 코드를 만들려고 노력했다. 나는 부분적으로 올바르게 할 수 있었다. 즉, "안녕하세요 세상"은 "세상 올레"가됩니다. 그 버그가 여기에 무엇이 있는지 궁금합니다. 나는 어딘가에 1 버그로 벗어나고 있다고 생각한다.
라이브러리 기능을 사용하지 않고 가능한 한 많이하고 싶었습니다. 여기이 문제를 찾으려고 & 많은 솔루션을 찾았지만 왜 내 솔루션이 작동하지 않는지 알고 싶습니다.
#include <stdio.h>
#include <string.h>
void reverse(char*, int);
int main(int argc, char **argv)
{
char st[]= "hello world";
int len = strlen(st);
int i=0,j=0;
reverse(st,len-1); // Reverse the entire string. hello world => dlrow olleh
while(st[j]){ //Loop till end of the string
if (*(st+j) == ' ' || *(st+j) == '\0') { //if you hit a blank space or the end of the string
reverse(st+i,j-1); // reverse the string starting at position i till position before the blank space i.e j-1
i=++j; //new i & j are 1 position to the right of old j
}
else {
j++; //if a chacacter is found, move to next position
}
}
printf("%s",st);
return 0;
}
void reverse(char *s, int n)
{
char *end = s+n; //end is a pointer to an address which is n addresses from the starting address
char tmp;
while (end>s) //perform swap
{
tmp = *end;
*end = *s;
*s = tmp;
end--;
s++;
}
}
감사합니다 : 여기
코드입니다!UPDATE : http://ideone.com/TYw1k
이 학습 사례를 감안할 때 논리적으로 코드와 효과 (아마도 종이와 펜을 사용하여)를 추적 해 보았습니까?또는 디버거를 사용하여 실제 런타임을 추적하려고 했습니까? – reuben
예 디버거를 사용했습니다. j의 값이 11이면 루프가 종료됩니다. 문자열의 11 번 위치에있는 문자는 '\ 0'입니다. 문제가 무엇인지 생각해 볼 수 있습니다. 내가 생각한 것을 시험해보고 질문을 업데이트 할 것입니다. – Bharat
잠깐, 문자열을 뒤집은 다음 그 안의 모든 단어를 뒤집을 수 있습니까? 원래의 문자열을 제공하면 안됩니까? – Shahbaz