chuyển 1 chuỗi sang số
tham khảo thêm
http://www.cplusplus.com/reference/c...dlib/atoi.html
Câu hỏi của em như trên, em đã tìm hiểu nhưng ko thấy, chỉ thấy nguời ta rất hay dùng hàm atoi.
chuyển 1 chuỗi sang số
tham khảo thêm
http://www.cplusplus.com/reference/c...dlib/atoi.html
Time
Hàm atoi:
int atoi(char *s);
Ý nghĩa của khai báo trên là: Chuyển chuỗi s sang giá trị int.
IF YOU ARE ALONE , I'LL BE YOUR SHADOW
IF YOU WANT TO CRY, I'LL BE YOUR SHOULDER
IF YOU NEED HAPPY, I'LL BE YOUR SMILE
BUT ANYTIME YOU NEED A FRIEND
IT JUST BE ME !!!
int sender = atoi(argv[2]);
câu lệnh chuyển chuỗi
httvhutceo
mình có bài tập giải nén tập tin như thế này: nếu tập tin có chuỗi 3a4c$ b5 D# thì khi giải nén ra nó thành "aaacccc$ b D#"
còn khi nén tập tin thì: nếu tập tin có chuỗi KKKAABDDDD CC@#HTML khi nén lại thành "3KAAB4D CC@#HTML"
phần nén mình đã làm được rùi, còn phần giải nén thì mình đang gặp rắc rối là ko biết khi mình duyệt qua từng kí tự thì làm sao chuyển chuổi thành số ví dụ; duyệt qua từng kí tự của chuỗi nếu gặp kí tự/chuỗi '3' thì làm sao chuyển thành số 3. Đây là code của mình
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
char test[255];
int a[255];
int dem;
void nen()
{
dem=1;
int flag=0;
ifstream fi1="DATA1.INP";
ofstream fo1="ENCODE.OUT";
while(1)
{
if(fi1.eof())
break;
else
{
fi1.getline(test,255,'\n');
if(strlen(test)>1)
{
for(int i=1;i<=strlen(test);i++)
{
if(test[i]==test[i-1])
dem++;
else
flag++;
if(flag==1)
{
if(dem>2)
{
fo1<<dem<<test[i-1];
dem=1;
flag=0;
}
else if(dem==1)
fo1<<test[i-1];
else if(dem==2)
fo1<<test[i-2]<<test[i-1];
dem=1;
flag=0;
}
}
}
}
}
}
void giainen()
{
dem=1;
int flag=0;
ifstream fi1="DATA2.INP";
ofstream fo1="DECODE.OUT";
while(1)
{
if(fi1.eof())
break;
else
{
fi1.getline(test,255,'\n');
if(strlen(test)>0)
{
for(int i=1;i<=strlen(test);i++)
{
if(atoi(test[i-1])>=3)
for(int i=0;i<atoi(test[i-1]);i++)
fo1<<test[i];
else
fo1<<test[i];
}
}
}
}
}
int main()
{
int chon;
while(1)
{
cout<<"Nhap 1 de nen"<<endl;
cout<<"Nhap 2 de giai nen"<<endl;
cout<<"Nhap 3 de thoat"<<endl;
cout<<"Ban chon: ";
cin>>chon;
if(chon==1)
{
nen();
}
else if(chon==2)
{
giainen();
}
else if(chon==3)
{
break;
}
else
cout<<"Lua chon khong thich hop, moi ban chon lai!!!"<<endl<<endl;
}
return 0;
}
ở hàm giainen() có vòng lặp for mình có viết if(atoi(test[i-1])>=3) là để chuyển từ kí tự/chuỗi sang số nhưng khi chạy nó báo lỗi: error C2664: 'atoi' : cannot convert parameter 1 from 'char' to 'const char *'
Làm sao để hàm này chạy được vậy các bạn?
tập tin DATA1.INP:
1
KKKAABDDDD CC@#HML
tập tin DATA2.INP:
1
3a4c$ b5 D#
tập tin nén của DATA1.INP có dạng:3KAAB4D CC@#HML
tập tin giải nén của DATA2.INP có dạng:aaacccc$ b D#
mong các bạn giúp đỡ
Thử code này thử bạn.
C++ Code:
#include<iostream> #include<fstream> #include<string.h> using namespace std; char test[255]; int a[255]; int dem; void nen() { dem=1; //int flag=0; ifstream fi1 ("DATA1.INP"); ofstream fo1 ("ENCODE.OUT"); while(1) { if(fi1.eof()) break; else { fi1.getline(test,255,'\n'); if(strlen(test)>1) { for(int i=1;i<=strlen(test);i++) { dem=1; if(test[i-1]==test[i]){ while(test[i-1]==test[i]){ //KKKAABDDDD CC@#HML i++;dem++; } if(dem>2) fo1<<dem<<test[i-1]; else fo1<<test[i-1]<<test[i-1]; } else fo1<<test[i-1]; } } } } } void giainen() { dem=1; int flag=0; ifstream fi1("DATA2.INP"); ofstream fo1("DECODE.OUT"); while(1) { if(fi1.eof()) break; else { fi1.getline(test,255,'\n'); if(strlen(test)>1) { for(int i=1;i<=strlen(test);i++) { int di=0; if(test[i-1]>='0'&&test[i-1]<='9'){ di+=10*(test[i-1]-'0'); if(test[i]<='9'&&test[i]>='0'){ while(test[i]>='0'&&test[i]<='9') {di+=test[i]-'0'; i++;} } else {di=test[i-1]-'0';} if(test[i]!=' '){ if(di!=2) for(int j=1;j<=di;j++) fo1<<test[i]; else fo1<<test[i]<<test[i]; } else fo1<<test[i]; i++; } else fo1<<test[i-1]; } } } } } int main() { int chon; while(1) { if(chon==1) { nen(); } else if(chon==2) { giainen(); } else if(chon==3) { break; } else } return 0; }