banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Một lỗi trong chương trình đảo ngược các từ trong một chuỗi  XML
  [Programming]   Một lỗi trong chương trình đảo ngược các từ trong một chuỗi 08/09/2011 11:56:46 (+0700) | #1 | 246662
explorer88
Member

[Minus]    0    [Plus]
Joined: 06/11/2010 22:32:47
Messages: 75
Offline
[Profile] [PM]
Bài toán đảo ngược các từ trong chuỗi chắc ai cũng biết rồi. Ví dụ "Hello world 123" -> "123 world Hello"

Em đang tập tành lập trình C. Đây là chương trình mà em viết:

Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void strip_newline( char *str, int size )
{
    int i;
    for (  i = 0; i < size; ++i )
    {
        if ( str[i] == '\n' )
        {
            str[i] = '\0';
            return;   
        }
    }
}

int main()
{	
	char input[100];
	char output[100];
	printf("Nhap input string: ");
	fgets(input, 100, stdin);
	// Loai new line o ngay truoc null character khoi input string
	strip_newline(input, strlen(input));
	// review input string
	printf("Review input string: %s", input);
	// Chuan bi san sang cho output string
	*output = '\0';
	// Duyet nguoc input string:
	int index;	
	for(index=strlen(input)-1; index >=0; index--)
	{
		if(*(input+index) == 0x20){
			// Noi doan substring sau blank space vao output string
			strcat(output, input + index + 1);
			// Them ky tu 0x20 vao ngay truoc ky tu NULL cua output string
			*(output + strlen(output)) = 0x20;
			*(output + strlen(output) + 1) = '\0';
			// Thu gon lai input string
			*(input+index) = '\0';
		}
	}
	// Ra khoi vong lap, van con sot mot tu trong do, noi not vao output string
	strcat(output, input);
        // Cho input string chua null char o dau, coi nhu la da chuyen het tu trong input string sang output string
	*input = '\0';

	//Hien thi ket qua
	printf("\n========================");
	printf("\nOutput string: %s", output);
	printf("\n");

	getchar();	
	return 0;
}


Lúc đầu, em nghĩ chương trình đã chạy hoàn chỉnh. Em thử chạy với input string là "Vietnam que huong toi" thì kết quả ra đúng là "toi huong que Vietnam". Nhưng thử với "Hacker vietnam association" thì lại được là: "association vietnam w�ۂ���Hacker". Lần khác chạy cũng với input string đó thì lại được "association vietnam {�ۂ��Hacker".

Thế là lỗi ở đâu nhỉ ? sao lúc chạy đúng lúc chạy sai thế nhỉ ?

Và thêm một điều nữa. Dòng
Code:
*(output + strlen(output) + 1) = '\0';

sao em gán là NULL thay vì '\0' lại bị warning khi biên dịch là:
Code:
Restring.c:39:35: warning: assignment makes integer from pointer without a cast

NULL không được ngầm hiểu là ký tự '\0' trong C ?
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|