Code in hoa chữ cái đầu mỗi từ trong chuỗi bị sai kết quả

Đề yêu cầu INPUT: nhập vào 1 chuỗi và OUTPUT: in hoa chữ cái đầu mỗi từ. Nhưng khi em chạy thì kết quả lại ra mỗi 1 kí tự thôi ạk

#include <iostream>
using namespace std;
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
char *vietHoaKyTuDau(char *S)
    {
	  char *ketqua=new char(strlen(S));
	  int j=0,i=0;
	  if(S[i]!=' ')
	   {
	   	ketqua[j++]=toupper(S[i]);
	   	i++;
       }
       for(int i=i;i<=strlen(S);i++)
       {
       	ketqua[j++]=S[i];
       	if(S[i]==' '&&S[i+1]!=' ')
       	{
       		ketqua[j++]=toupper(S[++i]);
		}
	   }
	   return ketqua;
    }
    void xoaKc(char *&A)
    {
    	int j=0;
    	for(int i=0;i<strlen(A);i++)
    	{
    		if(A[i]!=' ')
    		  A[j++]=A[i];
    		else if(j>0&&A[i+1]!=' ')
    		  A[j++]=A[i];
		}
		if(A[j-1]==' ')
		  A[j-1]='\0';
		else
		   A[j]='\0';
	}
int main(int argc, char** argv) {
	char *S=new char[80];
    cout<<"MOi NHAP CHUOI: ";
	gets(S);
	char *kq=vietHoaKyTuDau(S);
	xoaKc(kq);
	cout<<kq;
	return 0;
}

Hàm xoaKc để làm gì vậy bạn? Đề bài đâu có yêu cầu xóa khoảng cách đâu?
Vả lại, hàm này cũng chẳng phải xóa khoảng cách mà là phá nát chuỗi.

1 Like

Mình delete thử hàm xoaKc rồi nhưng vẫn lỗi ạk

int j = 0, i = 0;
if (S[i] != ' ') {
  ketqua[j++] = toupper(S[i]);
  i++;
}
for (int i = i; i <= strlen(S); i++) {
  ketqua[j++] = S[i];
  if (S[i] == ' ' && S[i + 1] != ' ') {
    ketqua[j++] = toupper(S[++i]);
  }
}

Bạn có thể chọn tên khác để đặt cho biến thay vì ii?

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