Bài tập mảng: danh sách tên, xử lý tên và in ra danh sách tên

Có rất nhiều bài tập về danh sách.Em chỉ muốn hỏi đơn giản là nhập danh sách tên,xử lý tên(Chữ hoa ở chữ cái đầu tiên trong tên) và in ra danh sách tên.Trong đó nhập tên và in tên,sắp xếp được sử dụng các hàm.
Khi em nhập danh sasch tên thì em sử dụng mảng 2 chiều.Nhưng khi xử lí tên thì lại dùng mảng một chiều.Nhưng trong hàm main để nhập danh sách và xử lí em không biết phải gọi 2 hàm nhập tên và xử lí tên thế nào ,mọi người có thể giúp em được không ạ.

hỏi đơn giản thật =)))

1 Like

Help me!!!
Khi em dùng mảng 1 chiều nhập tên và xuất tên thì lại báo lỗi . hu hu hu :confounded: :sob: :sob: :sob: .Từ sáng giờ đau đầu với cái này rùi. hu hu hu

#include<stdio.h>
#include<string.h>
void nhapten(char ten[],int n)
{
    int i;
    for(i=0; i<n; i++)
    {
        printf("Nhap ten thu %d",i+1);
        fflush(stdin);
        gets(ten);
    }
}
void xuatten(char ten[],int n)
{
    int i;
    for (i=0; i<n; i++)
    {
        printf("%s \n",ten);
    }
}
int main()
{
    char ten[25];
    int n;
    printf("Nhap so luong ten : ");
    scanf("%d",&n);
    nhapten(ten,n);
    xuatten(ten,n);
    return 0;
}

làm kiểu này nhập từng chữ cái thì dc. chứ nhập 1 chuỗi vào chắc k rồi =)))) mà hình như code cũng sai

1 Like

Bạn nên dùng mảng những xâu kí tự: char ten[100][25].
Trong đó 100 là số lượng xâu kí tự có thể nhập được, 25 là độ dài giới hạn của mỗi xâu kí tự.

1 Like

@minh_vu_03 trước em cũng dùng mảng 2 chiều.Nhưng khi mà em dùng hàm xử lí tên em không biết phải dùng thế nào cả.Hic.

Để bạn dễ hiểu thì mình dùng mảng con trỏ char vậy

#include <iostream>
#include <stdio.h>
using namespace std;

void nhapten(char* ten) {

    fflush(stdin);
    gets(ten);
}

void xuatten(char* ten) {

    puts(ten);
    cout << endl;
}

int main()  {

    char* ten[100];
    int n;

    cin >> n;
    for(int i = 0; i < n; i++)
        ten[i] = new char[30];

    for(int i = 0; i < n; i++)
        nhapten(ten[i]);

    for(int i = 0; i < n; i++)
        xuatten(ten[i]);

    for(int i = 0; i < n; i++)
        delete[] ten[i];

    return 0;
}
1 Like

Vâng,có lẽ phải dùng đến con trỏ thôi.Nhưng em đang muốn dùng xâu kí tự anh à.Có lẽ cái nào dễ hơn thì theo thôi.

#include<stdio.h>
#include<conio.h>
#include<string.h>

void NhapHoTen(char s[][100], int n){
	for (int i = 0; i < n; i++){
		printf("Nhap ho va ten nguoi thu %d: ", i + 1);
		fflush(stdin);
		gets(s[i]);
	}
}
void InHoTen(char s[][100], int n){
	for (int i = 0; i < n; i++){
		printf("\nHo va ten nguoi thu %d: %s ", i + 1,s[i]);
	}
}
//tach 1 xau ho ten
char TachHoTen(char s[],char s1[])
{
    int len = strlen(s);
    int i = len - 1, j;
    int m = 0;
    while(i >= 0){
    	if((s[i] == ' ') && (s[i+1] != ' ')){
    		for(j = i + 1; j < len; j++) {
    			s1[m] = s[j];
    			m++;
		}
		s[i] = '\0'; // ky tu nay ket thuc xau, de lay phan ho dem
		break;
	}
	i--;
}
   printf("\nHo va ten dem: %s\n",s);
   printf("Ten: %s",s1);
}

int main(){
	int n;
	char s[100][100];
	char s1[100];
	printf("Nhap so nguoi: ");
	scanf("%d", &n);
	NhapHoTen(s, n);
	InHoTen(s,n);
	for(int i=0;i<n;i++){
		TachHoTen(s[i], s1);
	}
	return 0;
}

thử cái này đi bạn.

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