#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// a) Xóa khoảng trắng thừa giữa các từ
void simplifySpaces( char * str) {
int i = 0 , j = 0 ;
int space = 1 ; // ban đầu đang là khoảng trắng
while ( str[ i] ) {
if ( j != 0 ) str[ j++ ] = ' ' ;
while ( str
[ i
] && ! isspace ( str
[ i
] ) ) { str[ j++ ] = str[ i++ ] ;
}
} else {
i++;
}
}
str[ j] = '\0 ' ;
}
// b) Viết hoa chữ cái đầu mỗi từ, còn lại viết thường
void formatCapitalization( char * str) {
int newWord = 1 ;
for ( int i = 0 ; str[ i] ; i++ ) {
newWord = 1 ;
} else {
if ( newWord) {
newWord = 0 ;
} else {
}
}
}
}
// c) Đảo thứ tự các từ
void reverseWords( char * str) {
char * words[ 100 ] ;
int count = 0 ;
// Tách từ
char * token
= strtok ( str
, " " ) ; while ( token != NULL) {
words[ count++ ] = token;
}
// In ngược lại
for ( int i = count - 1 ; i >= 0 ; i-- ) {
}
}
int main( ) {
char str[ 1000 ] = " HUyNh gIA HaO " ;
printf ( "Xau goc: \" %s\" \n " , str
) ;
// a) Đơn giản hóa khoảng trắng
simplifySpaces( str) ;
printf ( "a) Sau khi xoa khoang trang thua: \" %s\" \n " , str
) ;
// b) Viết hoa chữ cái đầu
formatCapitalization( str) ;
printf ( "b) Viet hoa chu cai dau moi tu: \" %s\" \n " , str
) ;
// c) Đảo thứ tự từ
printf ( "c) Dao thu tu cac tu: \" " ) ; reverseWords( str) ; // đã chỉnh sửa trực tiếp trên str
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KCi8vIGEpIFjDs2Ega2hv4bqjbmcgdHLhuq9uZyB0aOG7q2EgZ2nhu69hIGPDoWMgdOG7qwp2b2lkIHNpbXBsaWZ5U3BhY2VzKGNoYXIgKnN0cikgewogICAgaW50IGkgPSAwLCBqID0gMDsKICAgIGludCBzcGFjZSA9IDE7IC8vIGJhbiDEkeG6p3UgxJFhbmcgbMOgIGtob+G6o25nIHRy4bqvbmcKCiAgICB3aGlsZSAoc3RyW2ldKSB7CiAgICAgICAgaWYgKCFpc3NwYWNlKHN0cltpXSkpIHsKICAgICAgICAgICAgaWYgKGogIT0gMCkgc3RyW2orK10gPSAnICc7CiAgICAgICAgICAgIHdoaWxlIChzdHJbaV0gJiYgIWlzc3BhY2Uoc3RyW2ldKSkgewogICAgICAgICAgICAgICAgc3RyW2orK10gPSBzdHJbaSsrXTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICB9CiAgICBzdHJbal0gPSAnXDAnOwp9CgovLyBiKSBWaeG6v3QgaG9hIGNo4buvIGPDoWkgxJHhuqd1IG3hu5dpIHThu6ssIGPDsm4gbOG6oWkgdmnhur90IHRoxrDhu51uZwp2b2lkIGZvcm1hdENhcGl0YWxpemF0aW9uKGNoYXIgKnN0cikgewogICAgaW50IG5ld1dvcmQgPSAxOwogICAgZm9yIChpbnQgaSA9IDA7IHN0cltpXTsgaSsrKSB7CiAgICAgICAgaWYgKGlzc3BhY2Uoc3RyW2ldKSkgewogICAgICAgICAgICBuZXdXb3JkID0gMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAobmV3V29yZCkgewogICAgICAgICAgICAgICAgc3RyW2ldID0gdG91cHBlcihzdHJbaV0pOwogICAgICAgICAgICAgICAgbmV3V29yZCA9IDA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdHJbaV0gPSB0b2xvd2VyKHN0cltpXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCi8vIGMpIMSQ4bqjbyB0aOG7qSB04buxIGPDoWMgdOG7qwp2b2lkIHJldmVyc2VXb3JkcyhjaGFyICpzdHIpIHsKICAgIGNoYXIgKndvcmRzWzEwMF07CiAgICBpbnQgY291bnQgPSAwOwoKICAgIC8vIFTDoWNoIHThu6sKICAgIGNoYXIgKnRva2VuID0gc3RydG9rKHN0ciwgIiAiKTsKICAgIHdoaWxlICh0b2tlbiAhPSBOVUxMKSB7CiAgICAgICAgd29yZHNbY291bnQrK10gPSB0b2tlbjsKICAgICAgICB0b2tlbiA9IHN0cnRvayhOVUxMLCAiICIpOwogICAgfQoKICAgIC8vIEluIG5nxrDhu6NjIGzhuqFpCiAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpID49IDA7IGktLSkgewogICAgICAgIHByaW50ZigiJXMiLCB3b3Jkc1tpXSk7CiAgICAgICAgaWYgKGkgPiAwKSBwcmludGYoIiAiKTsKICAgIH0KICAgIHByaW50ZigiXG4iKTsKfQoKaW50IG1haW4oKSB7CiAgICBjaGFyIHN0clsxMDAwXSA9ICIgIEhVeU5oICAgIGdJQSAgICAgSGFPICAiOwoKICAgIHByaW50ZigiWGF1IGdvYzogXCIlc1wiXG4iLCBzdHIpOwoKICAgIC8vIGEpIMSQxqFuIGdp4bqjbiBow7NhIGtob+G6o25nIHRy4bqvbmcKICAgIHNpbXBsaWZ5U3BhY2VzKHN0cik7CiAgICBwcmludGYoImEpIFNhdSBraGkgeG9hIGtob2FuZyB0cmFuZyB0aHVhOiBcIiVzXCJcbiIsIHN0cik7CgogICAgLy8gYikgVmnhur90IGhvYSBjaOG7ryBjw6FpIMSR4bqndQogICAgZm9ybWF0Q2FwaXRhbGl6YXRpb24oc3RyKTsKICAgIHByaW50ZigiYikgVmlldCBob2EgY2h1IGNhaSBkYXUgbW9pIHR1OiBcIiVzXCJcbiIsIHN0cik7CgogICAgLy8gYykgxJDhuqNvIHRo4bupIHThu7EgdOG7qwogICAgcHJpbnRmKCJjKSBEYW8gdGh1IHR1IGNhYyB0dTogXCIiKTsKICAgIHJldmVyc2VXb3JkcyhzdHIpOyAvLyDEkcOjIGNo4buJbmggc+G7rWEgdHLhu7FjIHRp4bq/cCB0csOqbiBzdHIKICAgIHByaW50ZigiXCJcbiIpOwoKICAgIHJldHVybiAwOwp9Cg==