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
Mjukvara
- 22 / 5 Se vilka spel som funkar på Windows på ARM 28
- 21 / 5 Grafikprestanda i Senua's Saga: Hellblade II – ett av de tyngsta PC-spelen någonsin 152
- 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
- Igår Webbläsaren Edge stoppar skärmdumpar på jobbet 41
- Igår Uppgifter: Samsung kräver dina personuppgifter från reparatörer 28
- Igår Månadens drop! Kraftfullt nätaggregat hos Webhallen 126
- Igår Googles nya AI-sök föreslår klister på pizza 44
- Igår Nu kommer familjedelning till Googles lösenordshanterare 2
Datorkomponenter
Ljud, bild och kommunikation
- EU-användare kan snart separera Facebook, Messenger och Instagram20
- Detta gäller när HBO Max blir Max118
- Visa upp AI låtar ni gjort1
- [FAQ] Vilken router ska jag köpa?4283
- Första datorbygget på 20 år, PSU lyser men datorn startar inte3
- Rykte: Microsoft vill köpa upp Valve156
- Köpa nytt grafikkort alt. uppgradera mer?3
- Tips på routers!4
- Vad vill du veta från Webhallens VD?38
- Dagens fynd — Diskussionstråden49720
- Säljes Samsung Galaxy Watch5 LTE (44mm) grafit
- Säljes AMD Ryzen 5 5600X
- Säljes 2x8GB SO-DIMM DDR5, (5600 MHz)
- Säljes 10600K/Z490/Apex Pro TKL PBT/ RX580 8GBnitro+/NH-d15/144Hz m.m
- Säljes EK AIO Elite 360 D-RGB oöppnad
- Säljes Geforce + Radeon
- Köpes Noise cancelling hörlurar (skick kvittar) + Baby monitor
- Säljes Intel 8700K / 1080Ti / 16 GB RAM / 1 TB + 750 GB SSD
- Säljes Asus 2080 super Strix + phanteks glaciar
- Säljes Snabb bra dator
- G.Skill lanserar primärminnen med extra bling15
- Webbläsaren Edge stoppar skärmdumpar på jobbet41
- Uppgifter: Samsung kräver dina personuppgifter från reparatörer28
- Månadens drop! Kraftfullt nätaggregat hos Webhallen126
- Googles nya AI-sök föreslår klister på pizza44
- 45 år senare – nu är det ursprungliga konsolkriget över25
- Nu kommer familjedelning till Googles lösenordshanterare2
- Geforce RTX 5090 kan få 512-bitars minnesbuss51
- Snabbtest: Steam Deck överraskar som arbetsdator27
- Quiz: Vad kan du om sällsynta produkter?72
Externa nyheter
Spelnyheter från FZ
- Respawn kikar på att göra ett multiplayer-fps igår
- Över 10 000 har sparkats från spelbranschen i år igår
- Playstation-chef: branschen kommer "skifta från grafik till starka berättelser" igår
- Spelhelg hela helgen, sägs det – vad spelar du? igår
- Neil Druckmann tror att AI kan flytta gränserna för berättande igår