Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: [ Solved ]Một bài toán thú vị

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    9

    Mặc định [ Solved ]Một bài toán thú vị

    Mình gặp 1 bài toán nhìn đơn giản nhưng cũng khá thú vị,các bạn thử xem nhé :

    Cho 1 dòng văn bản . Tìm 1 từ trong đoạn văn bản và thay từ đó bằng 1 từ khác . In ra đoạn văn bản sau khi thay .

    Test :
    nhập dòng văn bản : toi yeu Viet Nam!
    từ cần tìm : yeu
    từ thay vào : qui

    ------> ket qua : toi qui Viet Nam!

    các bạn thử xem nhé . Chúc vui

  2. #2
    Ngày gia nhập
    03 2008
    Bài viết
    21

    Bước nhất tìm vi trí của từ yêu bằng thuật toán bruteforce sau đó là thay từ yeu thanh qui (chu y': từ cũ và mới phải cùng số ký tự vd: yeu =3, va quy=3; còn thay từ yeu thành từ thich thì mình chưa nghĩ ra)
    Code:
    void thaythe()
    {
    	char pString[N];
    	nhapchuoi(pString);
    	cout<<"Nhap chuoi muon thay the ; ";
    	char thay[N];
    	gets(thay);
    	int k=bruteforce(pString,thay);
    	if (k==-1) cout<<"Khong tim thay chuoi vua nhap !";
    	else
    	{
    		cout<<"Nhap chuoi thay the : ";
    		char the[N];
    		gets(the);
    
    		if (strlen(thay)!=strlen(the)) cout<<"Khong the thuc hien !";
    		else
    		{
    			int i=k;
    			for (int j=0;j<strlen(the);++j)
    			{
    				pString[i]=the[j];
    				++i;
    
    			}
    		}
    				cout<<pString;
    	}
    }
    Đã được chỉnh sửa lần cuối bởi atuan1989 : 16-04-2008 lúc 07:33 PM.

  3. #3
    Ngày gia nhập
    04 2008
    Nơi ở
    Bốn bề là nhà
    Bài viết
    703

    Ái chà tưởng đơn giản mà khó nhỉ đã ai nghĩ ra cách làm tổng quát chưa ?

  4. #4
    Ngày gia nhập
    03 2008
    Bài viết
    21

    dễ mà làm xong rùi đó hì còn nếu chưa biết về hàm bruteforce thì send tiếp nè
    Code:
    int bruteforce(char *pString,char *a)
    {
    	int c=strlen(pString)-strlen(a),t,l=0;
    	for (int i=0;i<=c;++i)
    	{
    		if (pString[i]==a[0])
    		{
    			t=i;
    			do
    			{
    				++t;
    				++l;
    			}while (pString[t]==a[l]);
    		}
    		if (l>=strlen(a)) break;
    	}
    	if (l<strlen(a)) return 0;
    	return i;
    }

  5. #5
    Ngày gia nhập
    04 2008
    Bài viết
    9

    Trích dẫn Nguyên bản được gửi bởi atuan1989 Xem bài viết
    Bước nhất tìm vi trí của từ yêu bằng thuật toán bruteforce sau đó là thay từ yeu thanh qui (chu y': từ cũ và mới phải cùng số ký tự vd: yeu =3, va quy=3; còn thay từ yeu thành từ thich thì mình chưa nghĩ ra)
    Code:
    void thaythe()
    {
    	char pString[N];
    	nhapchuoi(pString);
    	cout<<"Nhap chuoi muon thay the ; ";
    	char thay[N];
    	gets(thay);
    	int k=bruteforce(pString,thay);
    	if (k==-1) cout<<"Khong tim thay chuoi vua nhap !";
    	else
    	{
    		cout<<"Nhap chuoi thay the : ";
    		char the[N];
    		gets(the);
    
    		if (strlen(thay)!=strlen(the)) cout<<"Khong the thuc hien !";
    		else
    		{
    			int i=k;
    			for (int j=0;j<strlen(the);++j)
    			{
    				pString[i]=the[j];
    				++i;
    
    			}
    		}
    				cout<<pString;
    	}
    }

    cậu gửi cả bài để tớ chạy bài của cậu thử có sót phần nào không nhé ?

  6. #6
    Ngày gia nhập
    04 2008
    Bài viết
    9

    Mặc định [ Solved ]Một bài toán thú vị

    còn đây là bài của tớ

    Code:
    #include "stdafx.h"
    #include <stdio.h>
    #include <string.h>
    #include <conio.h>
    #include <ctype.h>
    
    
    char *str_str(char *s, char *s1, char *s2)
    {
    	int len = strlen(s);
    	int len1 = strlen(s1);
    	int len2 = strlen(s2);
    	int i=0, j, luu, m;
    
    	if (len1!=0)
    		while (i<len)
    		{
    			
    	if (((s[0] == s1[0]) && (!isalnum(s[len1])))||((0<i)&&(i<len-len1)&&(s[i] == s1[0]) && (!isalnum(s[i-1]))&& (!isalnum(s[i+len1])))||((i>=len-len1)&&(s[i] == s1[0]) && (!isalnum(s[i-1]))))
    					
    			{
    				j = 0;
    				luu = i;
    				while ((s[luu++] == s1[j++]) && (j <= len1)) ;
    				if (j==len1+1)
    				{
    					memmove(&s[i+len2], &s[i+len1],len-i-len1+1);
    					strncpy(&s[i],s2,len2);
    					len = len + len2 - len1;
    					i += len2;
    				}
    				else
    					i ++;
    			}
    			else i++;
    		}
    		return s;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	char s[81], s1[20], s2[20];
    	char Text[20][81];
    	int k,m,l;
    	
    
    	printf("input word find : "); fflush(stdin); gets(s1);
    	printf("input word put in : ");fflush(stdin); gets(s2);
    	printf("input stpochki text:"); fflush(stdin); scanf("%d",&m);
    	fflush(stdin);
    	
    	for (k=0;k<=m-1;k++)
    	{
    		
    		gets(Text[k]);
    		str_str(Text[k], s1, s2);
    	}
    	if ((1<=m)&&(m<=20))
    	{
    	if (strlen(s1) == strlen(s2))
    	{
    	l = 0;
    	for(k= 0; k<=m-1; k++)
    	{
    		if (strlen(Text[k]) != 0 )
    		{
    			printf("%s\n", Text[k]);
    			l++;
    		}
    	}
    	if (l==0)
    		printf("no solution ");
    	}
    	else printf("2 TU KHONG BANG SO KI TU");
    	}
    	else printf("NHAP SO DONG PHAI TU 1 DEN 20");
    			
    		return 0;
    }
    Đã được chỉnh sửa lần cuối bởi Mr tiger tide : 22-04-2008 lúc 02:12 AM.

  7. #7
    Ngày gia nhập
    04 2008
    Bài viết
    9

    bài toán đã hoàn chỉnh,các bạn thể tham khảo

  8. #8
    Ngày gia nhập
    04 2008
    Bài viết
    24

    mình thấy chưa bài nào hoàn chỉnh cả. Đã là thay thế thì dù là 1 từ hay 1 đoạn văn bản đều thay được không phân biệt từ hay đoạn đó dài ngắn bằng nhau hay không. Mà gọi là văn bản thì sẽ là file văn bản chứ không phải 1 đoạn xâu kiểu string. Hôm nào có thời gian mình sẽ post bài đầy đủ

  9. #9
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Try this :
    C++ Code:
    1. #include <string>
    2. #include <algorithm>
    3. #include <iostream>
    4.  
    5. bool eat_endline(std::string& str){
    6.   size_t len = str.length();
    7.   if(len > 0 && str[len - 1] == '\n')
    8.     str = str.substr(0, len - 1);
    9. }
    10.  
    11. bool ask_user(const std::string& question){
    12.   while(true){
    13.     std::cout << question;
    14.     std::string answer;
    15.     std::cin >> answer;
    16.     eat_endline(answer);
    17.     if(answer == "n")
    18.       return false;
    19.     if(answer == "y")
    20.       return true;
    21.     std::cout << "..invalid answer.\n";
    22.   }
    23. }
    24.  
    25. int main()
    26. {
    27.   std::string word;
    28.   std::string a_text =
    29.         "Whatever their origin, these Germanic dialects eventually coalesced"
    30.         "to a degree (there remained geographical variation) and formed what"
    31.         "is today called Old English. Old English loosely resembles some coastal"
    32.     "dialects in what are now northwest Germany and the Netherlands (i.e., Frisia)"
    33.     "Throughout the history of written Old English, it retained a synthetic structure.";
    34.  
    35.  
    36.   std::cout << " THE WHOLE TEXT IS :\n";
    37.   std::cout << " -----------------  \n";
    38.   std::cout << a_text << "\n\n";
    39.  
    40.   do{
    41.     std::string word,
    42.                 replacer;
    43.     std::cout << "ENTER A WORD YOU WANT TO REPLACE :\n";
    44.     std::cin >> word;
    45.     std::string::size_type pos = a_text.find(word.c_str());
    46.     if(pos == std::string::npos){
    47.       std::cout << "[] oops !! not found...\n\n";
    48.     }
    49.     else{
    50.       std::cout << "ENTER REPLACER : \n";
    51.       std::cin >> replacer;
    52.       a_text.replace(pos, pos + word.length(), replacer);
    53.     }
    54.     std::cout << a_text << "\n";
    55.   }while(ask_user("-> Continue yes or no ?"));
    56.   return 0;
    57. }

  10. #10
    Ngày gia nhập
    04 2008
    Bài viết
    9

    Trích dẫn Nguyên bản được gửi bởi lelinhcntt Xem bài viết
    mình thấy chưa bài nào hoàn chỉnh cả. Đã là thay thế thì dù là 1 từ hay 1 đoạn văn bản đều thay được không phân biệt từ hay đoạn đó dài ngắn bằng nhau hay không. Mà gọi là văn bản thì sẽ là file văn bản chứ không phải 1 đoạn xâu kiểu string. Hôm nào có thời gian mình sẽ post bài đầy đủ
    việc 2 độ dài từ đó bằng nhau là tớ thêm vào ở lệnh if ,còn nếu không thích thì ta có thể bỏ lệnh if đi,như vậy có thể thay 1 từ bằng 1 xâu.Bài này mình đã test đủ các trường hợp . thân .

Các đề tài tương tự

  1. [ Solved ]Thắc mắc về chương trình in ra chữ Việt
    Gửi bởi thichgame trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 10
    Bài viết cuối: 28-11-2008, 06:39 AM
  2. [ Solved ] Làm thế nào để trở thành 1 developer giỏi.
    Gửi bởi quachnguyen trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 19-08-2008, 05:57 PM
  3. [ Solved ]Một số thắc mắc về OOP
    Gửi bởi the-misery trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 21-05-2008, 06:08 PM
  4. [ Solved ]Như thế này có gọi là use hàm ảo + đa hình không?
    Gửi bởi minhduc0912 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 17-04-2008, 07:22 PM
  5. [ Solved ]Thắc mắc về Kế thừa
    Gửi bởi ktwiz trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 22-03-2008, 06:24 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn