30/09/2018, 17:18
Xóa khoảng trắng thừa của chuổi
tìm hoài không ra chổ sai mong mọi người giúp đỡ
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
inline void xoa(char *s,int vt)
{
int n=strlen((char *)s.c_str());
for(int i=vt;i<n;i++)
{
s[i+1]=s[i];
}
s[n-1]=' ';
}
inline char xoatrang(char *s)
{
int n=strlen((char *)s.c_str());
for(int i=0;i<n;i++)
{
if(i==' ')
{
xoa(s,i);
}
}
}
int main()
{
string s;
cout<<"moi ban nhap :";
getline(cin,s);
cout<<"chuoi vua nhap la
"<<s;
cout<<endl;
xoatrang(s);
cout<<"chuoi sau khi xoa khoang trang la:
";
cout<<s;
system("pause");
return 0;
}
Bài liên quan
Mình chưa tìm lỗi run-time, mình chỉ nhìn thấy một số điểm cần lưu ý như thế này:
c_str() là hàm để lấy data trong std::string C++ đưa về mảng kí tự trong C (trả về con trỏ vị trí đầu của mảng kí tự đó). Tham số của hàm là kiểu char*, vậy thì khi gọi hàm, bạn nên gọi như thế này
Và bên trên hàm không cần ép kiểu char* nữa.
kiểu char* thì nó bản chất là con trỏ trỏ đến mảng kí tự rồi, không cần dùng hàm c_str() nữa.
ò ! bạn test-run thử! mình sài dev do máy củ chưa đủ kinh tế mua máy mới để sài visua nên có nhiều hàm trong class string bắt phải ép kiểu cho nó . chuyện ép kiểu hay không điều đó không ảnh hưởng !
mình muốn hỏi bạn chương trình minh chạy là báo lổi dòng này
int n=strlen((char *)s.c_str());
thậm chí mình viết bên c: cũng chay sai
bạn giúp mình với
Như mình đã nói trên, biến s đã là mảng kí tự trong C, mà hàm c_str() dùng để chuyển kiểu std::string C++ về con trỏ trỏ đến mảng kí tự trong C. Nếu đã là con trỏ kiểu char rồi thì dùng hàm c_str() để chuyển về làm gì nữa.
Hơn nữa con trỏ kiểu char không có member function c_str(). Gọi thế bị lỗi là đúng.
Mình đã nói ở trên rồi. Bạn đọc không kĩ hoặc không hiểu rồi phải mất công hỏi lại.
à mình đã hiểu hàm c_str dùng để lấy chuổi string c++ này về để về c chuyển thành kiểu char trong c rồi trả về chuổi ký tự cho c++ để con trỏ *s này trỏ tới vùng nhớ kiểu char này được trả về bản thân con trỏ *s lúc này là chuổi kiểu char rồi nên không cần phải ép cho nó nữa đúng không vậy ! nhưng mình thử rồi vẫn không được
không được bạn ơi ! bên c++ không có thư viện này chỉ có bên c thôi
bên c++ sử dụng hàm của c thông qua 1 cái hàm hay là ở chổ đó nhưng mình bị rối chổ này
buồn thiệt !không biết là sai chổ nào nữa á!
Sao bạn lại lấy biến i kiểu int ra để so sánh với kí tự Space?
Bạn cần sửa lỗi mà không cho người đọc biết bạn bị lỗi gì rồi bắt người khác phải tìm hết cả project thì ai rãnh tìm giúp bạn.
#include <string.h>
string
chứ ko phảichar *
, nếuchar *
thì dùng luôn các hàm bên CMình nói 2 lỗi chính
Thuật toán cũng sai, bạn tham khảo
à mình hiểu rồi bản chất mảng bên c++ là 1 cái lớp thế nên cần phải có tham chiếu truyền vào cho hàm và khi truyền vào là string 2 vấn đề này minh đã hiểu ! hi cám ơn Nguyễn Duy Khánh ha tại vì ông thầy mình zạy bên c mà theo minh được biết là hướng đối tượng xắp tới học là bên c++ nên mình làm quen trước ấy mà !
có gì không hiểu mong giúp đỡ với nha cám ơn ban nhiều Nguyễn Duy Khánh
ct này viết bằng c
cach 2 dung them 1 xau khac
void void_delSpaceC (char *cStr)
{
int i,j=0, iLen, iCount=0;
char cNew[100];
iLen= strlen (cStr);
for (i=0 ; iLen ; i++)
{
if (i == 0 ) cNew[j] = cStr[i];
else
{
if (cStr[i] == ’ ’ && cNew[j] == ’ ')
{
iCount++;
}
else
{
j++;
cNew[j] = cStr[i];
}
}
}
iLen=strlen (cNew);
printf (“so phan tu trong xau la %d, da xoa di %d dau space \n”,iLen, iCount);
puts(cNew);
}
*/
bạn tham khảo của mình nhé mình làm cho std::string.
OKEY! cám ơn mấy anh nhé làm được rồi !
cái nầy thì chuẩn không cần chỉnh lun nhá… ^^
#include
using namespace std;
#include<string.h>
void xoakt(char s[], int j)
{
int x = strlen(s);
for (int i = j; i < x; i++)
{
s[i] = s[i + 1];
}
}
int main()
{
int dem = 0;
int j = 0;
char a[255], b[255];
cin.getline(a, 255);
int x = strlen(a);
while (a[0] == ’ ')
{
xoakt(a, 0);
dem++;
}
for (int i = 0; i < x; i++)
{
if (a[i] != ’ ’ || a[i + 1] != ’ ')
{
a[j] = a[i];
j++;
}
}
strncpy_s(b, a,j);
cout << b;
system(“pause”);
return 0;
}
A post was merged into an existing topic: Topic chứa các reply được cho là off-topic - version 2