GOOGLE ADS

Samstag, 16. April 2022

Ich versuche, das längste Wort im Satz zu finden

#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
char a[n+1]; // intializing array
cin.getline(a,n); // inputting array
cin.ignore();
int maxlen=0,curr=0,i=0;
while(1)
{

if (a[i] ==' ' || a[i] == '\0'){
maxlen=max(curr,maxlen);
curr=0;
}
curr++;
if (a[i]=='\0'){
break;
}
i++;
}
cout<<maxlen;
}

Hier versuche ich, die maximale Wortlänge in diesem Satz zu finden, aber ich kann den Satz nicht speichern oder das Array eingeben. Um dies zu überprüfen, setze ich cout für das Array ein und es druckt das von mir eingegebene Array nicht. Ich möchte den Grund wissen


Lösung des Problems

Fehler C2131: Ausdruck wurde nicht zu einer Konstante ausgewertet (6):

Dies wird durch die Verwendung von Nicht-Standard-C++ hier verursacht:

cin>>n;
char a[n+1]; // intializing array

Arrays in C++ müssen mit einem konstanten Ausdruck deklariert werden, nicht mit einem laufzeitbasierten Ausdruck. Da nes nur zur Laufzeit bekannt ist, ist dies kein legales C++.

Um das Problem zu lösen, benötigen Sie keine rohen Char-Arrays. Das geht ganz einfach mit std::string. Darüber hinaus std::stringstreamwird der Code durch die Verwendung noch einfacher, da nicht auf Leerzeichen geprüft werden muss:

#include <algorithm>
#include <string>
#include <iostream>
#include <sstream>
int main()
{
std::string sentence;
// Read the sentence
std::getline(std::cin, sentence);
// Parse each word
std::stringstream strm(sentence);
std::string word;
size_t maxLen = 0;
while (strm >> word)
maxLen = std::max(maxLen, word.size());
// Output results
std::cout << sentence << "\n" << maxLen;
}

Für diese Eingabe:

This is a test of getting the longest word in a string

die ausgabe ist:

This is a test of getting the longest word in a string
7

Schließlich sollten Sie einem guten C++-Buch folgen, anstatt zu Websites zu gehen, die Codierungen zeigen, die Folgendes verwenden:

#include<bits/stdc++.h>

oder die oben erwähnte ungültige Array-Syntax.

Kein seriöses C++-Buch oder eine seriöse C++-Website, die einem Peer-Review unterzogen wurde, zeigt Code, der diesen Header oder die ungültige Array-Syntax verwendet.

Wenn Sie zu einer Website gehen, die Code wie diesen zeigt, und der Zweck der Website ist, C++ zu lehren, sollten Sie C++ nicht von dieser Website lernen.

Keine Kommentare:

Kommentar veröffentlichen

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...