PDA

View Full Version : سوال: سوال در مورد stringstream



o0LTIMAT0Ro
شنبه 09 مرداد 1389, 17:22 عصر
1-stringstream براي چي به کار ميبريم؟

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main ()
{
string mystr;
float price=0;
int quantity=0;

cout << "Enter price: ";
getline (cin,mystr);
stringstream(mystr) >> price;
cout << "Enter quantity: ";
getline (cin,mystr);
stringstream(mystr) >> quantity;
cout << "Total price: " << price*quantity << endl;
return 0;
}
2-
آقا من این برنامه رو نوشتم.اما نمیدونم چرا فقط مثلا وقتی اسم و آدرس و غیره اگه عدد باشه مشکلی پیش نمیاد ولی وقتی کاراکتر باشه کار نمیکنه؟

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<dos.h>
/*******************
STRUCT PIECE:

******************/
struct addr{
int num;
char name[25];
char addr[50];
unsigned long int zip;

}addr_info[100];
void do_null();
void add(); //0k
void rem(); //0k
void menu(); //0k
void srch(); //0k
void lst_all(); //0k
void n_all_list(); //0k
void shw_slct(); //0k
int find_last(); //0k //0k
void exit(); //0k
void choose(int *);
//////////////////////---*************************---//////////////////////////////
void main(int argc,char *argv[]){


clrscr();
clrscr();
//------>Hello Screen;
if (*argv[1] && argc==2) {

cout<<"\nHi "<<argv[1];
sleep(2);
}
//<---------------End hello screen;
do_null();
menu();
}

void menu(){
int *c;
clrscr();
cout<<"\n******************************************\n";
cout<<"\n* ENTER 1 TO ADD. *";
cout<<"\n* ENTER 2 TO REMOVE. *";
cout<<"\n* ENTER 3 TO SEARCH. *";
cout<<"\n* ENTER 4 TO NUMBER OF USER. *";
cout<<"\n* ENTER 5 TO LIST SELECTED. *";
cout<<"\n* ENTER 6 TO LIST ALL. *";
cout<<"\n* ENTER 7 TO EXIT. *";
cout<<"\n******************************************\n";

cin>>*c;
choose(c);
}
void exit() {
char ans;
int c;
cout<<"\n Do You Like To Exit Really?(yes/n0)";
cin>>ans;
if (ans=='y')

{
exit(1);
}else{
menu();
}
}
void choose(int *c){
switch(*c) {

case 1:
add();
break;
case 2:
rem();
break;
case 3:
srch();
break;
case 4:
n_all_list();
break;
case 5:
shw_slct();
break;
case 6:
lst_all();
break;
case 7:
default :
exit();
}
}
void add(){
int n;
n=find_last();
clrscr();
addr_info[n].num=n;
cout<<"\nEnter Name:";
cin>>addr_info[n].name;
cout<<"\nEnter addres:";
cin>>addr_info[n].addr;
cout<<"\nEnter zip:";
cin>>addr_info[n].zip;
menu();
}
int find_last(){
for (int i=0;atoi(addr_info[i].name);++i);


return i;
}
void rem(){
int rec;
cout<<"\n Enter REcord(0-99)";
cin>>rec;
addr_info[rec].name[0]='\0';
cout<<"\n Succes \n";
menu();
}
void srch(){
int srch;
cout<<"\nPLEASE ENTER YOUR RECORED:(1-100)";
cin>>srch;
///////////
if(srch<=find_last() && srch>=0){
cout<<"\nname:"<<addr_info[srch-1].name<<"\tAddress:"<<addr_info[srch-1].addr<<"\t Zip:"<<addr_info[srch-1].zip;
}else{
cout<<"\n INVALID RECORED!";
}
getch();
menu();

}
void lst_all(){
int n;
n=find_last();
//cout<<"************************************************** ***********************";// $ Should active with list!
for (int i=0;i<n;i++){

cout<<"\n************************************************ *";
cout<<"\n Num:"<<i+1;
cout<<"\n Name:"<<addr_info[i].name;
cout<<"\n Address:"<<addr_info[i].addr;
cout<<"\n Zip:"<<addr_info[i].zip;
cout<<"\n************************************************ *";

}
sleep(3);
menu();
}
void n_all_list(){

cout<<"\n"<<(find_last()+1);
sleep(2);
menu();
}

void shw_slct(){
int n;
cout<<"\n 0k,please enter your record that you want to check it!(1-99)";
cin>>n;
cout<<"*************************************************";
cout<<"\n Num:"<<n;
cout<<"\n Name:"<<addr_info[n-1].name;
cout<<"\n Address:"<<addr_info[n-1].addr;
cout<<"\n Zip:"<<addr_info[n-1].zip;
cout<<"\n************************************************ *";
sleep(3);
menu();
}
void do_null(){
for(int i=0;i<=100;i++){
addr_info[i].name[0]='\0';
cout<<"\n\n\n";
}}

o0LTIMAT0Ro
یک شنبه 10 مرداد 1389, 10:50 صبح
سلام.مشکل دومی که مطرح کرده بودم رو تونستم حل کنم.
الان دو تا سوال دارم.
لطفا در مورد
getpass
چند تا مثال بزنین.
+این که چطور میشه کاری کرد برنامه یه وروودی بگیره که بعد از چند ثانیه خودش اینتر کنه مثلا 5 ثانیه وقت بده که طرف کد رو وارد کنه+چطور میشه کاری کرد تعداد کاراکتر ها به اندازهی خاصی که رسد اینتر کنه مثلا یه کاراکتر 5 حرفی که یوزر تایپ کرد خود برنامه ادامه برنامه رو اجرا کنه

khafan_bat
یک شنبه 10 مرداد 1389, 14:58 عصر
دوست عزیز شکل تابع getpass به صورت زیر هست :


Declaration: char *getpass(const char *prompt);



از این تابع برای گرفتن کلمه ی عبور استفاده میشه طوری که حداکثر طول پسسورد که این تابع می تونه بگیره 8 کاراکتر هست و اینکه هنگام تایپ پسسورد به جای اینکه کاراکتر فشرده شده از صفحه کلید در کنسول نشون داده بشه یا مثل ویندوز * نشون داده بشه مثل کنسول های یونیکس و لینوکس هیچ چیزی نشون داده نمیشه ( تابع کاراکتر ها رو میگیره ) .

آرگومان این تابع هم یک استرینگ هست که کار خاصی انجام نمیده فقط یک متن رو چاپ میکنه و بعد از اون منتظر گرفتن کاراکتر ها که همون پسسورد هست میمونه !!

خوب همینطور که میبینی خروجی این تابع یک اشاره گر از نوع کاراکتر هست. پس برای اینکه از خروجی این تابع در تصمیم گیری ها و برنامه خودت استفاده کنی ابتدا باید یک متغیر اشاره گر از نوع کاراکتری بسازی .

یک مثال ضمیمه کردم. میتونی دانلود کنی . م

khafan_bat
یک شنبه 10 مرداد 1389, 15:00 عصر
درباره ی سوالی آخری که مطرح کردی فکر کنم میخوای همین تابع رو شبیه سازی کنی ؟ درسته ؟

khafan_bat
یک شنبه 10 مرداد 1389, 15:11 عصر
stringstream یک کلاس از قبل تعریف شده هست که اشیای اون مدیریت جریان ورودی - خروجی رشته را بر عهده دارند . این کلاس خودش از کلاس iostream مشتق شده .

کلاس stringstream مثل بیشتر کلاس های بزرگ در سی و سی پلاس پلاس دارای یه سری توابع عضو هست که یکی از معروفترین این توابع تابع get هست که زیاد هم استفاده میشه . البته بیشتر توابع عضو خودش رو به ارث برده از کلاس های پدر خودش مثل ostream و istream

اطلاعات بیشتر :


http://www.cplusplus.com/reference/iostream/stringstream/

http://www.cplusplus.com/reference/iostream/istream/get/

khafan_bat
دوشنبه 11 مرداد 1389, 13:24 عصر
سوال میپرسی حداقل بیا جوابت رو بگیر . . .