Bài toán in ra tên viết tắt của họ và tên

mình chưa hiểu tại sao nó sai chỗ nào mong mọi người chỉ lỗi

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
 
int main()
{
	char s[100];
	printf("Nhap ho va ten:");
	gets(s);
	int S=strlen(s);
	int s1;
	for(int i=2;i<=S;i++)
	{	s1=s[1];
		if(s[i]==' ')
			s1=toupper(s1)+ toupper(s[i+1]);
		printf("%c",s1);	
	}
	
}

Code này ai chỉ bạn vậy :smiley:

2 Likes

mình dò trên mạng nhưng chỉ thấy dạng pascal nên biến tấu nhưng rồi tắt đường luôn, khỏi biết phải sửa sao :joy:

Sai rồi kìa. Printf nó in hết

1 Like

Passcal array start từ 1
còn C start từ 0
nên đoạn for sửa lại.

Ngoài ra, toàn bộ đoạn code mình chưa hiểu nó đúng chỗ nào.

int main()
{
    char s[100];
    printf("Nhap ho va ten:");
    gets(s);// Giả sử nhập là Day Nhau Nhau
    int S=strlen(s); // S = 13
    int s1;
    for(int i=0;i<S;i++) // Giả sử đã sửa lại index
    {	
        s1=s[0]; // s1 = 68
        if(s[i]==' ')  // lúc này i = 3, 8
            s1=toupper(s1)+ toupper(s[i+1]);  
            // Khi i = 3 toupper(s[i+1]) = 78  => s1 = 146
            // Khi i = 8 toupper(s[i+1]) = 78  => s1 = 146
        printf("%c",s1);
        // Khi i != 3 và  8
        // Kết quả in ra là D
        // Khi i = 3 hoặc i = 8
        //Kết quả in ra là [�] Không rõ.; 	
    }
}

// Kết quả cuối cùng là
// DDD�DDDD�DDDD

Bạn có thể sửa lại như sau:

Nhập chuỗi // Day Nhau Nhau
In ra ký tự đầu tiên viết hoa // D
Lặp từ ký tự thứ 2 đến ký tự cuối cùng thứ 2 (không lặp hết) // i := 1 ; i< S-1
    Nếu ký tự đang lặp là " "
         In ra ký tự sau // DNN
    Không có sau đó
Kết thúc

Bỏ qua việc nhập có 2 dấu " " liền kề

2 Likes

cảm ơn bạn mình tìm ra cách giải rồi

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
 
int main()
{
	char s[100];
	printf("Nhap ho va ten:");
	gets(s);
	int S=strlen(s);
	char s1;
	for(int i=0;i<S;i++)
	{	
		if(s[i]!=' ' && s[i-1]==' '||i==0)
			printf("%c",toupper(s[i]));	
	}
	
}
1 Like

Thực ra là từ đâu là do người lập trình. :slight_smile:

var arr: array[a..b] of Integer;

Thì arr xài từ arr[a] cho đến arr[b] với a nhỏ hơn hoặc bằng b.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?