Problem med c++ program
Du har skrivit
second = first+1.find('*',first+1);
, vilket du förmodligen inte menar.
1. är ett flyttal och "find" är inget giltigt suffix för sådana. De har heller inga medlemsfunktioner (vilket till exempel strängar har).
Det största problemet är nog att du krånglar till det för dig...:)
Använd en STL container, tex vector:
http://www.cplusplus.com/reference/stl/vector/
Du vill ha datat som ligger i minnet användbart så du vill inte gärna skapa skumma representationer med * som separator i ditt fall... direkt när man läser eller skriver till fil är den enda gången du vill göra någon form av representation av datat..
Typ så här i pseudo kod:
struct NameEntry {
string firstName;
string lastName;
string phoneNumber;
};
vector<NameEntry> entries;
void addEntry(NameEntry entry) {
entries.push_back(entry);
}
void saveToFile() {
for (i=0; i < entries.size(); i++) {
output << entries[i].firstName << '*' << ...
}
Nu orkar jag inte tänka längre... läggdags... men troligtvis så har du fått lite kött på benen.
Fast vill du bara få skiten att funka så antar jag att detta borde funka...
antar att du vill hitta index för första och andra '*' i namelist[i]
då borde detta funka:
second = namelist[i].substr(first+1).find('*');
Denna kod ser även lite suspekt ut:
firstname = namelist[i].substr(0,first);
lastname = namelist[i].substr(first+1,second-first-1);
phonenumber = namelist[i].length();
Lättaste är att splitta med hjälp av strtok som finns i string.h,
den är lite C-aktig eftersom den jobbar med char[] och attt den även modifierar din sträng så bästa är att göra en kopia av din sträng innan:
char* nameListCopy = new char[namelist[i].size() + 1];
strcpy(nameListCopy, namelist[i].c_str());
firstname = strtok(nameListCopy, '*');
lastname = strtok(nameListCopy, '*');
phonenumber = strtok(NULL, '*');
delete [] nameListCopy;
Sen känns det lite som du antingen är gammal C-programmerare eller att du har hittat exempelkod som en C-programmerare har skrivit eftersom du deklarerar alla variabler först i metoderna...
Det är tydligare att deklarera variablerna så nära stället där de används istället för att scrolla upp för att hitta vad variabeln är för typ.
Sen borde first och second vara av typen size_t för att vara portabelt.
Det finns massor med gottigott på cplusplus.com så jag rekommenderar dig att bekanta dig med exemplen där så du skriver mer C++ kod som utnyttjar styrkan i språket så det inte bara är C med steroider (inget illa menat om C, iallafall om vi snackar C99, C har sina användningsområden oxå)
Fake edit:
Fick lite panik när jag tipsade om strtok och kom på hur mycket problem jag hade med den när jag insåg att den kladdar i det man skicka in i den så const-strängar och literals är ingen höjdare för den...
Så detta är lite mer C++ och borde funka bättre för att splitta en sträng
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
std::vector<std::string> splitString(std::string sourceString,
char delimiter) {
std::vector<std::string> tokenVector;
std::istringstream tokens(sourceString);
do {
std::string token;
std::getline(tokens, token, delimiter);
if (token.size() > 0) {
tokenVector.push_back((token));
}
}
while (tokens);
return tokenVector;
}
int main(int argc, char* argv[]) {
std::string test = std::string("arne anka skulle gå på bio");
std::vector<std::string> tokens = splitString(test, ' ');
std::cout << tokens.size() << std::endl;
for (size_t i = 0; i < tokens.size(); i++) {
std::cout << "token: " << tokens[i] << std::endl;
}
return 0;
}
- Idag Intel Arc får prestandalyft på 300 procent i Assassin's Creed: Unity 15
- Idag Sony läcker uppgifter i rättegång – så stort är Call of Duty 19
- Igår Nvidia: "Energieffektiva RTX 4060 sparar hundralappar" 39
- Igår MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare 68
- Igår Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer 15
- Köpråd: Laptop för spelande - stram budget
- Hej, min fjärrkontroll till Google tv'n har pajat och kan inte synka kontrollen
- Bärbar dator för studier och enklare spel för fattig student - förslag i tråden.
- Köpråd för bärbar dator för 3D-arbete (Maya, Zbrush, Substance Designer, Houdini samt Unreal Engine)
- Speldator 15-18k
- Bilder på ditt senaste inköp (2023) [inga produktbilder]1014
- Benify-erbjudanden på Samsung-TV [utbruten tråd]1036
- Köpråd: Laptop för spelande - stram budget12
- Kommer flytta till stan och mitt wifi kommer säkert synas av hundratals människor varje dag. Vilken router ska jag köpa och hur ska den ställas in?10
- Grafikkort med Vulkan, vad?6
- Vilken serie såg du senast?1256
- PSVR2 - diskussionstråd445
- Veckans fråga: Vilket operativsystem föredrar du?121
- Komplett SweC-Bonanza 7 - Jul i Juli -edition - Diskussion104
- Youtube testar aggressiv taktik mot annonsblockerare93
- Säljes Herman Miller Aeron
- Säljes 2x Noctua NF-A14 Industrial PPC 2000rpm pwm chromax
- Säljes Switchar, RAM och vattenkylning
- Säljes Intel i5 9400f LGA1151-2
- Säljes Meta Quest 2 VR portabelt headset
- Säljes Komplett dator: Ryzen 7 3700x, GTX1080, 32GB DDR4, 1TB M.2 SSD + 1,5TB HDD, 750W PSU mm. Kan säljas med/utan GPU.
- Säljes Intel Core i5 13400F
- Säljes Gamingdator 4080 / 13700KF / 32GB DDR5
- Säljes I5 12500
- Säljes LG 27'' UltraGear 27GP950 4K Nano IPS 160 Hz HDMI 2.1
- Paypal vill ersätta lösenord med passkeys5
- Intel Arc får prestandalyft på 300 procent i Assassin's Creed: Unity15
- Youtube testar aggressiv taktik mot annonsblockerare93
- Sony läcker uppgifter i rättegång – så stort är Call of Duty19
- Nvidia: "Energieffektiva RTX 4060 sparar hundralappar"39
- MSI Geforce RTX 4060 Ventus 2X OC – bra prestanda vid 1080p men medioker kylare68
- Veckans fråga: Vilket operativsystem föredrar du?121
- Bilar med smarta inslag ger fler dumma fel78
- Noctua släpper monteringsram för "deliddade" Ryzen 7000-processorer15
- Nvidias nästa arkitektur för Geforce kommer år 202558
Externa nyheter
Spelnyheter från FZ
- Till slut – Football Manager-saves kommer kunna användas i nyare spel idag
- Quiz – Vad kan du om spöken? idag
- Dying Light 2-uppdatering i dag gör nätterna betydligt farligare idag
- Microsofts vd ser gärna att konsolexklusiviteter försvinner idag
- Bloober Team säger sig vara färdiga med psykologisk skräck idag