PDA

View Full Version : đếm số từ trong chuỗi bằng C#?



leekaymms
23-01-2010, 05:29 PM
may a giup e bai nay voi,e dang can gap,hix
Viết chương trình nhập vào một chuỗi . Tính xem có bao nhiêu từ trong chuỗi (mỗi từ cách nhau bởi một hoặc nhiều khỏang trắng)
chu y:viet bang c# thuj
cái chỗ cách nhau nhjeu khỏang trắng do, e chju thua,
may a gjup e voi

meoconlongvang
23-01-2010, 06:02 PM
Bạn dùng hàm split của lớp string để cắt chuỗi theo khoảng trắng. Duyệt mảng chuỗi vừa split được và đếm số chuỗi khác rỗng.

leekaymms
23-01-2010, 07:42 PM
ban oi ,minh ko hieu . ban dua chuong trinh cu the dc ko?? thank

Yin Yang
23-01-2010, 08:08 PM
Mấy phuơng thức đơn giản như split bạn nên tự học cách sử dụng, bởi vì chức năng trợ giúp trong VS khá mạnh nên bạn có thể đọc và hiểu ngay.



string s = "sdf sdF sdfs df sdfs ";
string[] arr = s.Split(' ');

Phần in ra bạn kiểm tra xem phần tử nào rỗng thì bỏ qua, hoặc trước khi split nên cắt bỏ những khoảng trắng thừa

tdat00
24-01-2010, 08:42 AM
cách trực quan hơn nè: duyệt tất cả chuỗi và đếm số khoảng trắng tìm được:



string input = "Se sẻ sung sướng vì sinh sản ra se sẻ con ";
input = input.Trim(); // xóa các khoảng trắng vô nghĩ ở 2 đầu
int count = 1;
for (int i = 1; i < input.Length; i++)
if (input[i] == ' ' && input[i - 1] != ' ')
count++;


Console.WriteLine("Số từ là: " + count);

nguoidanongxala
24-01-2010, 10:15 AM
Bạn có thể chuyển xâu đó sang mảng ký tự. Sau đó kiểm tra nếu ký tự nào là khoảng trắng thì bỏ qua, ngược lại tăng biến đếm số ký tự. Sau đó in biến đếm số ký tự của mảng ra màn hình. Chúc bạn zui

Yin Yang
24-01-2010, 12:06 PM
cách trực quan hơn nè: duyệt tất cả chuỗi và đếm số khoảng trắng tìm được:



string input = "Se sẻ sung sướng vì sinh sản ra se sẻ con ";
input = input.Trim(); // xóa các khoảng trắng vô nghĩ ở 2 đầu
int count = 1;
for (int i = 1; i < input.Length; i++)
if (input[i] == ' ' && input[i - 1] != ' ')
count++;


Console.WriteLine("Số từ là: " + count);


Bạn làm như kiểu C++ hả, nếu input sau khi trim mà Length=0 thì count cũng bằng 1 rồi. Muốn loại hết khoảng trắng thừa khỏi chuỗi chỉ cần dùng Replace(' ',' ')

tdat00
24-01-2010, 04:20 PM
Bạn làm như kiểu C++ hả, nếu input sau khi trim mà Length=0 thì count cũng bằng 1 rồi. Muốn loại hết khoảng trắng thừa khỏi chuỗi chỉ cần dùng Replace(' ',' ')

dùng hàm replace thì phải chạy vòng lặp để xóa hết các khoảng trắng vô nghĩa bác. trong khi mình không cần phải làm thế.

em quên vụ chuỗi null. Nếu thế thì thêm vào 1 hàm if nữa là được mà.

leekaymms
24-01-2010, 10:37 PM
chi duoc dung c# thui ma,khong duoc lam bang c++

ductam
26-01-2010, 06:04 PM
dùng split như Ying Yang là nhanh gọn hơn cả.Ying Yang nói đúng đấy. Mấy việc đơn giản thì nên tự xử thôi.

Linus
11-10-2010, 11:56 PM
Mình chỉ mới học C thui.Nên chỉ nghĩ dc thuật toán đơn giản sau.Check thấy cũng hiệu quả.
Mở rộng : In ra từng từ


#include<conio.h>
#include<stdio.h>
#include<string.h>
void main()
{
int i,n,dem=0;
char a[100];

printf("Nhap chuoi :");
gets(a);

n=strlen(a);

for(i=0;i<n;i++) //dem tinh bang so(ky tu + khoang trang)lien nhau
if(a[i]!=' '&&a[i]!='\t')
if(a[i+1]==' '||a[i+1]=='\t')
dem++;
if (a[n-1]==' '|| a[n-1]=='\t') //cuoi chuoi la khoang trang
printf("So tu = %d",dem);
if (a[n-1]!=' '&& a[n-1]!='\t') //cuoi chuoi la ky tu
printf("So tu = %d",dem+1);
getch();
}

VoTichSu
12-10-2010, 10:56 AM
@Linus:
Đây là đề tài về C#. Khác với C/C++, người ta dùng C# là vì người ta muốn sử dụng các tiện nghi của dot NET.
Trong C#, học cách sử dụng các class của dot NET quan trọng hơn học thuật toán.

Trong ngữ cảnh của C#, trả lời như Yin Yang và Meoconlongvang là đúng rồi (split ra array rồi tính size của array)

Nếu không thì dùng Regular Expression tính cũng được:


// chuỗi đơn giản

public int DemTuKieuArraySplit(string s)
{
return s.Split(' ').Length;
}

// nếu chuỗi rắc rối thì phải làm như sau

public int DemTuKieuArraySplitRacRoi(string s)
{
return s.Split((new char[] { ' ', '.', ',' }),
StringSplitOptions.RemoveEmptyEntries).Length;
}

public int DemTuKieuRegEx(string s)
{
return Regex.Matches(s, @"\b\w+\b").Count;
}

Zell
29-10-2010, 11:49 PM
#include <stdio.h>
#include <conio.h>
#include <string.h>

int ktra(int i,int n,char s[])
{
i++; // Xet Phan Tu Truoc No
for (i;i<n;i++)
if (s[i]!=' ') // Neu Tu tiep Theo
return i; // Luu vi Tri cua Tu Moi
return 0; // Neu ko co Tu Moi Tra ve 0
}

int main ()
{
char s[50];
int n,dem=0;
printf("Input String: ");
fflush (stdin); gets(s);

n=strlen(s);
if (s[0]!=' '&& s[0]!=NULL) // 1 ki tu != ' ' dem =1 nguoc lai dem=0
dem=1;
for (int i=0;i<n;i++)
if (s[i]==' ') // Gap Khoang Trang
if(ktra(i,n,s)!=0) // goi Ham
{
dem++;
i=ktra(i,n,s); // Xet Tu Tiep Theo (o day ta da loai cac vi tri Null Trung Nhau)
}
printf("so Tu = %d ", dem);

getch();
}

Zell
29-10-2010, 11:55 PM
#include<conio.h>
#include<stdio.h>
#include<string.h>
void main()
{
int i,n,dem=0;
char a[100];

printf("Nhap chuoi :");
gets(a);

n=strlen(a);

for(i=0;i<n;i++) //dem tinh bang so(ky tu + khoang trang)lien nhau
if(a[i]!=' '&&a[i]!='\t')
if(a[i+1]==' '||a[i+1]=='\t')
dem++;
if (a[n-1]==' '|| a[n-1]=='\t') //cuoi chuoi la khoang trang
printf("So tu = %d",dem);
if (a[n-1]!=' '&& a[n-1]!='\t') //cuoi chuoi la ky tu
printf("So tu = %d",dem+1);
getch();

cho mình hỏi a[i]!='\t' ý nghĩa là gì ?

zstar
30-10-2010, 12:10 AM
cho mình hỏi a[i]!='\t' ý nghĩa là gì ?

\t là kí tự cách khi bạn nhấn tab ấy