View previous topic :: View next topic |
Author |
Message |
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Tue Feb 14, 2006 7:59 pm Post subject: |
|
Ok.Vienkarshi liksim to c_str() mieraa un izmantosim vienkarshi aa="aaa"; (ka jau normali cilveki ari dara) un miers un beerzinsh.
Un sho tabulu es gribeju atstat ka pedejo:
Quote: | char un sprint f plusi:
-atrs (performance nevis programmeeshanas zinjaa)
-neaiznjem tos leikos 4KB
-var pa tiesho stradat ar atminju nevis caur visadiem c_str() (kas arii prasa laiku un kaa jau mineejo ieprieksh-vari paarrakstiit paari bufer robezham).
minusi:
-vairak program rindinju (lidz ar to aiziet vairak laika lai uzprogrammeetu)
-fikseets lielums (kuru char* gadiijumaa var mainiit ar realloc)
string plusi:
-atri programmeejaas (ietaupaas laiks)
-dinamisks buferis
-laikam tomeer iesaaceejiem sho buus vieglaak saprast nekaa char[]
minusi:
-bija man te paris kljumes ar sho (piemeram,nestradaj,ja eksportee klasi no dll (_declspec(dllexport)) un vel 99 warningi,ja liku vinju klasee,kura ir zem citaam klaseem (atkal aizmirsu kaa tas saucaas))
-kriit performance
-liekie 4KB |
_________________ long time; /* know C */ |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Tue Feb 14, 2006 8:05 pm Post subject: |
|
Lai tā būtu. (miera labad)
Kaut gan daži plusi un mīnusi man liekas "exceptionally" uzjautrinoši. :D
Amba. _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Wed Feb 15, 2006 12:05 pm Post subject: |
|
Man veel peedeejais skaamais/jautaajums:
Kaa jau visiem zinaams-Microsoft Platform SDK izmanto funkcijas,kuru kaa string izmanto LPSTR.Taatad,lai izmantotu sho funkciju ar string klasi ir jaadara taa (ja nekljuudos):
Code: |
char aa[MAX_PATH];
string str;
Funkcija(aa);
str=aa;
|
Tulit saksies lielaa bljaushana,bet shis kods diezvai straadaatu:
Code: |
string str;
Funkcija(str.c_str());
|
Taapeec jau es to c_str() teemu aiztiku,bet sapratu tomeer ka laikam pirmais variants buus vieniigais un nekaadas variaacijas ar to c_str() nesanaaks.Taatad ar string tomeer iznaak rakstiit garaak (pirmais piemeers).Vai arii es kljuudos? _________________ long time; /* know C */ |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Feb 15, 2006 9:16 pm Post subject: |
|
Tu joprojām nesaprati. Neiet runa par WinAPI funkciju atgrieztajiem datiem (tie pie tam tiek atgriezti C, nevis C++ stilā).
Ar buferi nevajag veigt "stringiskas" operācijas - konkatenēšanu, formatēšanu un tml...
Tavam WinAPI koda piemēram nav ne vainas.
Šādā piemērā string klasi vispār nevar izmantot, jo kā jau pats saproti c_str() atgriež pointeri uz const char'iem. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Wed Feb 15, 2006 9:50 pm Post subject: |
|
Quote: | Neiet runa par WinAPI funkciju atgrieztajiem datiem |
Es visu sapratu.Bet, ja reiz izmanto "WinAPI funkcijas atgrieztos datus", tad rakstit sanak garak. _________________ long time; /* know C */ |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Sun Feb 26, 2006 1:52 am Post subject: |
|
Burvīgs. Daudz pilnīgāk, skaidrāk un argumentētāk uzrakstīts nekā man. _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Sun Feb 26, 2006 11:00 am Post subject: |
|
Perfekti.Viss skaidri un gaishi tabulaa izlikts.Un luuk arii tas-Easy to use, good code clarity:sprintf() - yes,std:stringstream - no _________________ long time; /* know C */ |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Feb 26, 2006 1:23 pm Post subject: |
|
Atkal gribi sākt kašķēties? :)
Izlasi pārējo tabulas daļu - sprintf: Length safe, Type safe, Usable in template = No
stringstream = yes. |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Sun Feb 26, 2006 8:15 pm Post subject: |
|
Nee nee.Es saprotu,ka tas ir nedroshi utt,bet gribu pasviitrot BHC teikto:
Quote: | 4. Galu galā, tas ir vienkārši neērti un nepareizi. |
Ok viss! _________________ long time; /* know C */ |
|
Back to top |
|
|
BHC
Joined: 31 Jan 2006 Posts: 81
|
Posted: Sun Feb 26, 2006 10:52 pm Post subject: |
|
elvman wrote: | Nee nee.Es saprotu,ka tas ir nedroshi utt,bet gribu pasviitrot BHC teikto:
Quote: | 4. Galu galā, tas ir vienkārši neērti un nepareizi. |
Ok viss! |
Manā uztverē nedroši automātiski nozīmē, ka neērti un nepareizi.
Length safe, Type safe, Usable in template = No - neērts ir tas, ka viegli ielaist kļūdu un relatīvi grūti to detektēt. Tu saki, ka tas ir ērti?
Ok viss! _________________ Screenshot coming when hell freezes over. |
|
Back to top |
|
|
gazz
Joined: 03 Jan 2004 Posts: 355 Location: Teika
|
Posted: Tue Mar 28, 2006 9:05 pm Post subject: |
|
taaks, esmu uzduuries konkreetai probleemai: unicode un stl. Izmantoju MS VC7. Ideja bija uztaisiit pavisam elementaaru logotaaju. Vainiigaa Logger klases metode izskataas shaadi:
Code: | static void LogInfo(LPWSTR text) {
// dabuujam laiku
SYSTEMTIME time;
GetLocalTime(&time);
std::wostringstream outputStream;
outputStream << "[" << time.wHour << ":" << time.wMinute
<< ":" << time.wSecond << "] INFO: " << text << endl << ends;
OutputDebugStr(outputStream.str().c_str());
if (instance!=NULL&& instance->m_bStreamReady) {
*(instance->m_file) << outputStream.str();
}
} |
Attieciigi man vispaar ir Logger klase kaa singletons un ja inicializeets tad m_file ir atveerts ofstream uz teksta failu. Jautaajums ir - kapeec man vinsh log failaa izvada tekstu liidz pirmajam latvieshu burtam(konkrētā gadījumā 'ē') un viss.
PS dotajaa gadiijumaa ar UNICODE man arii skaitlji vairs nestraadaa(?stringaa tiek sabaazti ASCII kodi? par shito lietu droshi varu kljuudiities). Ceru ka saprataat paldies par atsauciibu.
PPS - Izmantoju UNICODE un STL jo taa vajag un man vajag skaidrojumu/risinaajumu tieshi dotajam piemeeram. |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Mar 28, 2006 9:16 pm Post subject: |
|
1) Es ceru, ka tu tajā unikodes strīmā raksti unikodes stringus? Tb L"glāžšķūņis" nevis "glāžšķūņis"?
2) Kāpēc LogInfo(LPWSTR text) nevis LogInfo(const wstring& text) ?
3) par to formatēšanu - kādus tieši formātus tev vajag?
hexā 8 simbolu uppercase: stream << std::hex << std::setw(8) << std::uppercase << std::fill(0) << x;
floats xx.xxx formātā (aizpilda ar atstarpēm no kreisās puses): stream << std::setprecision(5) << std::setw(6) << std::setfill(' ') << 1.234567;
Var gadīties, ka papildus ir jāiekļauj <iomanip> headeris. |
|
Back to top |
|
|
gazz
Joined: 03 Jan 2004 Posts: 355 Location: Teika
|
Posted: Tue Mar 28, 2006 9:31 pm Post subject: |
|
vienkaarshs standalone piemeers:
Code: | #include <string>
#include <sstream>
#include <fstream>
unsigned short bladaac = 15;
using namespace std;
void main() {
wofstream file("test.txt");
wostringstream outStream;
outStream << L"bladāņīc, " << bladaac << ends;
file << outStream.str();
file.close();
} |
test.txt fails satur tikai un vieniigi "blad"
PS - ja iznjem aaraa tos LV burtus, tad var redzeet arii ka unsigned short netiek normaali izvadiits. |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Tue Mar 28, 2006 9:56 pm Post subject: |
|
Nja.. nav man nācies ar windows unikodi nekad programmēt, paldies dievam :)
Visu laiku ar cross-platformiskiem libiem esmu ņēmies, kuri utf8 saprot.
Par to stringu nezināšu..
Bet kāpēc to skaitli neraksta, tas varētu būt tāpēc, ka unikodes chars (wchar) ir unsigned short, un tad tas 15 rakstās kā chars moš, nevis skaitlis? (tas ir tikai mans minējums).
Pamēģini static_cast uz int, varbūt līdz. (katrā ziņā GCC normāli ierakstīja 15 tavā piemērā).
Par STL unikodes stringiem uzgāju šo te: http://www.codeproject.com/vcpp/stl/upgradingstlappstounicode.asp
varbūt līdz. |
|
Back to top |
|
|
|