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 ?