Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Một số vấn đề thắc mắc về char*?

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    24

    Mặc định Một số vấn đề thắc mắc về char*?

    Đề bài yêu cầu:chuyển một chuỗi thường cho trước về kiểu in hoa (nhất định phải sử dụng con trỏ).

    C++ Code:
    1. #include <iostream.h>
    2. #include <string.h>
    3.  
    4. char* upper_case(char *s)
    5. {
    6.     char* sPtr;
    7.     sPtr = new char [strlen(s)];
    8.     char* p = sPtr;
    9.     for(;*s!='\0';++s)
    10.     {
    11.         *p++ = *s - 32;
    12.     }
    13.     *p = '\0';
    14.     return(sPtr);
    15. }
    16.  
    17. int main()
    18. {
    19.     char* str = "congdongcviet";
    20.     char* str1;
    21.     str1 = upper_case(str);
    22.     cout <<str1<<endl;
    23.     delete [] str1; //  error why?
    24.     return(0);
    25. }

    --Phải chăng dạng bài về chuỗi nào cũng phải xin cấp phát thêm một khối nhớ char* mới?Giả sử mình muốn xử lý trực tiếp lên chuỗi nguồn luôn đc ko?(vẫn phải sử dụng con trỏ nha).Nếu đc bạn có thể cho mình một ví dụ về cách đó nhá!!Ngay đề bài đổi thường -> hoa này luôn.

    --Còn nữa tại sao khi mình giải phóng bằng toán tử delete lại bị lỗi nhỉ?Các bạn giải tích dùm mình ?ngay dòng gần cuối cTrình đó.

    Cám ơn nhiều!
    Đã được chỉnh sửa lần cuối bởi khoadangnguyen : 31-03-2008 lúc 03:17 PM.

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

    C++ Code:
    1. #include <iostream>
    2. #include <cstring>
    3.  
    4. char* upper_case(char *s){
    5.     char* sPtr = new char[strlen(s) + 1];
    6.     char* p = sPtr;
    7.     for(;*s!='\0'; ++s){
    8.         *p++ = *s - 32;
    9.     }
    10.     *p = '\0';
    11.     return sPtr;
    12. }
    13.  
    14. int main(){
    15.     char* str = "congdongcviet";
    16.     char* str1;
    17.     str1 = upper_case(str);
    18.     std::cout << str1 << "\n";
    19.    
    20.     delete [] str1; //  error why?
    21.    
    22.     return 0;
    23. }
    Sai đâu mà sai cậu ?
    trong các header của C++ không có iostream.h không có string.h
    Nếu thực sự cậu viết C++ :
    - #include <iostream>
    - #include <cstring>
    và phải dùng using namespace std;
    hoặc :
    using std::cout;
    using std::cin;
    hoặc dùng thẳng trong câu lệnh.
    Thêm nữa mấy cái dấu ngoặc của cậu thêm vào return () để làm gì, nó chẳng có 1 ý nghĩa gì, nếu không có thì đừng add vào.
    Còn về bài trên, thao tác trực tiếp vào chuỗi cũng được, vấn đề là size không của chuỗi không thay đổi nên chẳng cần cấp phát động làm gì !

  3. #3
    Ngày gia nhập
    10 2007
    Bài viết
    24

    - Đúng rồi! ko có lỗi syntax khi mình compile.Nhưng khi chạy thì bị lỗi chỗ này nè:mặc dù vẫn ra kết quả nhưng sau đó là 1 bảng thông báo lỗi run-time: ở chỗ cái delete đó!
    Mình xài VC++ 6.0!

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

    Tui dùng g++ ở nhà, h tui ở trường xài visual C++ 2008 có run-time gì đâu cậu, code đó làm sao có lỗi chỗ delete được. Cậu check kĩ lại xem.

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

    Thêm nữa vấn đề cậu dùng char* str = " ", đây là 1 dạng chuỗi const, cho nên cấp phát động sẽ là bắt buộc, vì cậu không thể chỉnh sữa dữ liệu của 1 chuỗi dạng const. const char* là style của C. Nếu thực sự cậu học C++ thì cậu nên dùng #include <string>. Và đây tui sẽ cho cậu vài examples về cách giải bài trên của cậu.
    C++ Code:
    1. #include <string>
    2. #include <iostream>
    3. using std::size_t;
    4.  
    5. void upper_case(std::string& s){
    6.   for(size_t x = 0; x < s.length(); ++x){
    7.     if(islower(s[x]))
    8.       s[x] = toupper(s[x]);
    9.   }
    10. }
    11.  
    12. int main(){
    13.   std::string str = "congdongcviet";
    14.   upper_case(str);
    15.   std::cout << str << "\n";
    16.  
    17.   return 0;
    18. }
    Dùng STL :
    C++ Code:
    1. #include <iostream>
    2. #include <algorithm>
    3. #include <string>
    4.  
    5. int main(){
    6.   std::string s("cong dong c viet");
    7.   std::cout << s << "\n";
    8.  
    9.   std::transform(s.begin(), s.end(), s.begin(), toupper);
    10.  
    11.   std::cout << s;
    12.   return 0;
    13. }

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

  1. Turbo C Lỗi Thắc mắc sự khác biệt giữa char * và char[]
    Gửi bởi KTT trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 26-06-2012, 05:02 PM
  2. Convert char** to const char** như thế nào?
    Gửi bởi iamme22021990 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 31-05-2012, 10:27 PM
  3. C : Thắc mắc về char và char *
    Gửi bởi yoinb trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 21
    Bài viết cuối: 14-03-2012, 04:30 PM
  4. Tìm SV theo tên trong DSLK đơn, lỗi invalid conversion from `char' to `const char*'
    Gửi bởi dk411 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 02-11-2011, 01:55 PM
  5. Thắc mắc về con trỏ dạng char **, char *** trong C
    Gửi bởi evarit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 07-11-2010, 06:41 PM

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