Du är min fiende tills motsatsen är bevisad, och bevisbördan ligger hos dig.
Ordräkning i C [noob]
Visa signatur
På sid 160 i boken "The C programming Language" av Kernighan och Richie, den svenska upplagan så står det så här:
Antag att vi vill hantera det mera generalla problemet att räkna förekomster av alla ord i en inmatning. Eftersom listan av ord ej är känd i förväg, kan vi inte bekvämt sortera den och använda en binär sökning. Vi kan inte heller göra en linjär sökning för varje ord som det anländer, ... bla bla etc etc
Du kanske hittar en intressant lösning där? Jag antar att du har den boken, då det är C-bibeln. Det är mycket lärorikt att se andra lösningar.
Citera flera
Citera
Hmm, har ingen kompilator så jag kan inte testa min kod men den kan väl i alal fall peka dig i rätt riktning... Orkar inte kommentera hela nu men den sorterar orden medan man matar in dom, alltså är ordlistan alltid sorterad... Den lägger inte heller in dubbletter utan ökar då bara "count" i Word-structen... nåväl fråga gärna om något är konstigt...
struct Word{
char word[100];
int count;
};
void setWord(char* set, char* to){
int n;
for(n = 0; to[n] != '\\0'; n++){
set[n] = to[n];
}
set[n] = '\\0';
}
void addWord(char* theWord, Word* theWords, int* numberOfWords){
int wordCheck = 0;
int letterCheck = 0;
while(1){
if(wordCheck >= numberOfWords){
setWord(theWords[wordCheck].word, theWord);
theWords[wordCheck].count = 1;
numberOfWords++;
break;
}else if((int)theWords[wordCheck].word[letterCheck] < (int)theWord[letterCheck]){
wordCheck++;
letterCheck = 0;
}else if((int)theWords[wordCheck].word[letterCheck] > (int)theWord[letterCheck]){
numberOfWords++;
for(int n = numberOfWords; n > wordCheck; n--){
theWords[n] = theWords[n-1];
}
setWord(theWords[wordCheck].word, theWord);
theWords[wordCheck].count = 1;
break;
}else if(theWords[wordCheck].word[letterCheck] == theWord[letterCheck]){
if(theWord[letterCheck] == '\\0'){
theWords[wordCheck].count++;
break;
}else{
letterCheck++;
}
}
}
}
int main(){
char text[5000] = "In this paper I shall defend a Humean theory of motivation. But first I should like to examine some of the standard criticisms of this theory and some alternative views that are currently in favour. Both in the Treatise and the Enauirv Hume maintains that reason alone never motivates action but always requires the cooperation of some separate, and separately identifiable desire-factor in order to bring about action.";
char currentWord[100];
int currentWordAt = 0;
Word words[1000];
int numberOfWords = 0;
for(int n = 0; text[n] != '\\0'; n++){
if((int)text[n] >= 97 && (int)text[n] <= 122){
currentWord[currentWordAt] = text[n];
currentWordAt++;
}else if((int)text[n] >= 65 && (int)text[n] <= 90){
currentWord[currentWordAt] = (char)((int)text[n]+32);
currentWordAt++;
}else if(currentWordAt > 0){
currentWord[currentWordAt] = '\\0';
addWord(currentWord, words, numberOfWords);
currentWordAt = 0;
}
}
if(currentWordAt > 0){
currentWord[currentWordAt] = '\\0';
addWord(currentWord, words, numberOfWords);
}
for(int n = 0; n < numberOfWords; n++){
cout << "Word: " << words[n].word << ", Occurrence: " << words[n].count << endl;
}
return 0;
}
Senast redigerat
Citera flera
Citera
Om det går bra med c++ så är väl den enklaste lösningen en map, t.ex.
map<string, unsigned int> words;
och sen använder man orden som index i map:en, alltså: ++words[ord].
Skulle ju kunna göra något liknande i ren C, genom att implementera en hashmap eller dylikt. Annars är ju sortering en bra lösning.
Visa signatur
Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410
Citera flera
Citera
Hårdvara
- Idag Snart hjälper Google TV dig hitta fjärrkontrollen 10
- Igår Cooler Master släpper flerfärgad kylpasta 53
- Igår Veckans fråga: Vilken extern datalagring föredrar du? 48
- Igår Microsoft Recall under lupp hos integritetsmyndighet 36
- Igår Testpilot: Komplett-PC Epic Gaming a230 Esport Edition – tryggt för spel 6
Mjukvara
- Igår Se vilka spel som funkar på Windows på ARM 27
- 21 / 5 Grafikprestanda i Senua's Saga: Hellblade II – ett av de tyngsta PC-spelen någonsin 118
- 19 / 5 Ghost of Tsushima kan använda DLSS och FSR 3 samtidigt 11
- 17 / 5 27 år senare – Winamp får öppen källkod 45
- 17 / 5 Grafikprestanda i Ghost of Tsushima – en välpolerad PC-version 28
Övrigt
Datorkomponenter
Ljud, bild och kommunikation
- Rykte: Microsoft vill köpa upp Valve75
- Styra 12v fläkt med HA/ESPHome0
- 144Hz för kontorsskärm?18
- Värmland förbereder internet vid krisläge5
- Veckans fråga: Vilken extern datalagring föredrar du?48
- Plats för lite gubbgnäll9979
- Rengöra CPU och lägga på ny kylpasta men hur mycket?8
- Dagens fynd — Diskussionstråden49698
- Bildskärmar och glasögon3
- Wordle på svenska - ordlig.se7953
- Säljes Realtek 8822CE m.2 wifi-kort
- Säljes Google Pixel 7 Pro
- Säljes Mekaniska diskar
- Säljes Nvidia Asus ROG Strix RTX 4090
- Säljes Gamingdator i7 7700k, 16GB, 1080Ti 11GB, 500GB, WIFI
- Säljes Möss och Musmattor!
- Säljes Asus ROG Strix 1070 Ti 8GB
- Säljes ASUS GeForce GTX 1070 8GB Expedition OC
- Säljes I9 14900kf
- Säljes Meg Z790 Godlike
- Värmland förbereder internet vid krisläge5
- Rykte: Microsoft vill köpa upp Valve75
- Snart hjälper Google TV dig hitta fjärrkontrollen10
- Googles nya AI-sammanfattningar får reklam10
- Cooler Master släpper flerfärgad kylpasta53
- Veckans fråga: Vilken extern datalagring föredrar du?48
- Microsoft Recall under lupp hos integritetsmyndighet36
- Testpilot: Komplett-PC Epic Gaming a230 Esport Edition – tryggt för spel6
- Se vilka spel som funkar på Windows på ARM27
- Snabbtest: 3DMark Steel Nomad – visuellt avancerat, förvånansvärt lättdrivet43
Externa nyheter
Spelnyheter från FZ
- Rapport: Alla Super Smash Bros. Ultimate-karaktärer vinner lika mycket idag
- Överlevnadsspelet Nightingale har fått ett offline-läge idag
- Läckare: Final Fantasy IX-remaken är verklig, men inte Final Fantasy X-remaken idag
- Paradox-veteran tar över som vd för Helldivers 2-utvecklaren idag
- The Witchers fjärde säsong får en första teaser-trailer idag