#include <iostream>/span>
#include <vector>
#include <string>
using namespace std;
vector<string> separate(string str){
string build = "";
vector<string> temp;
for(int i = 0; i < str.size(); i ){
if(str[i] != ' '){
build = str[i]。
} else if(str[i] == ' '){
temp.push_back(build)。
build = ""。
}
}
return temp;
}
int main() {
int count;
字串句子。
vector<int> numTimes。
getline(cin, sentence)。
vector<string> words = separate(句子)。
for(int i = 0; i < words.size(); i ){
for(int j = 0; j < words.size() ; i ){
if(words[i] == words[j]){
count ;
}
}
numTimes.push_back(count)。
}
for(int k = 0; k < words.size(); k ){
cout << words[k] << " - " << numTimes[k] < < endl;
}
return 0;
}
這段代碼應該是接收一個字串,將其分成各個單詞,將這些單詞放入一個向量,最后輸出該單詞在句子中出現的次數。然而,當運行我的代碼時,我得到一條訊息,說程式以代碼-11退出。 我在網上查了一下,但不完全理解這意味著什么,或者它在我的代碼中出現的位置。
uj5u.com熱心網友回復:
@Allan Wind是正確的,但要提供一個使用C 17標準的替代解決方案。
迭代
與其使用索引,不如使用一個更現代的for回圈。
for (const char&ch : s)
而不是:
for (size_t i =0; i < str. size(); i )
畢竟,在這種情況下,索引并不重要。
在這種情況下,索引并不重要。
處理多個空間 現在,無論OP的代碼還是Allan的代碼,只要遇到一個以上的連續空間,就會在輸出向量上推送一個空字串。我們可以通過在遇到空格時將字串重置為空來糾正這一點,但是當遇到空格且字串為空時,不要采取任何行動。
我們還需要檢查在回圈結束時,字串是否為非空。如果是的話,我們需要將其推到輸出向量上。我們可能沒有得到一個尾部空格來觸發推送最后一個字。
到目前為止,把它放在一起 計算單詞 我們可以使用一個地圖來計算單詞的出現次數。我們使用一個 uj5u.com熱心網友回復: 將有符號的計數器變數( 這似乎解決了segfault的問題,回答了提出的問題。
你沒有提供輸入和輸出的樣本,但計數顯然是錯誤的。 你說的 建議你研究一下,如果你需要進一步的幫助,可以打開新的問題。
標籤: 上一篇:覆寫從父類繼承的依賴gem類vector<string> separate(string s){
vector<string> output;
string current = ""。
for (const char & ch : s) {
if (current != "" && ch == ' ' ) {
output.push_back(current)。
current = ""。
}
else if (ch == ' ') {
//不做任何事情!。
}
else {
current = ch;
}
}
if (current != ""/span>) {
output.push_back(current)。
}
return output。
}
#include <string>/span>
#include <vector>
#include <iostream>
使用 命名空間 std.com.cn>。
vector<string> separate(string s)。
int main() {
auto v = separate("hello world foo") 。
for (auto i : v) {
cout << i << endl;
}
}
vector<string> separate(string s) {
vector<string> output;
string current = ""。
for (const char & ch : s) {
if (current != "" && ch == ' ' ) {
output.push_back(current)。
current = ""。
}
else if (ch == ' ') {
//不做任何事情!。
}
else {
current = ch;
}
}
if (current != ""/span>) {
output.push_back(current)。
}
return output。
}
map<string, int>,其中每個單詞都是關鍵,而val是發生次數。當我們遍歷這些詞時,如果該詞已經作為一個鍵存在于地圖中,我們就把它遞增`。如果沒有,我們將其設定為1。
int main(){
auto v = separate("hello world hello world foo") 。
map<string, int> m;
for (auto i : v) {
if (m[i]) {
m[i] = 1;
}
else {
m[i] = 1;
}
}
for (auto const& [key, val] : m) {
cout << "單詞" << key << " "發生"。
<< val << " 次。" << endl;
}
}
i, j)改為無符號(size_t),因為你將兩者進行比較。 在separate(..)中,將if-else-if改為if-else,并根據@user4581301修正了回圈,以使用正確的回圈變數。 還修正了最后一個字沒有被添加的問題。 稍微改一下格式,用tab/8空格來縮進。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<string> separate(string str) {
string build = "";
vector<string> temp;
for(size_t i = 0; i < str.size(); i ) {
if(str[i] == ' '/span>) {
temp.push_back(build)。
build = ""。
} else {
build = str[i];
}
}
if(build.size()) {
temp.push_back(build)。
}
return temp。
}
int main() {
int count = 0;
字串句子。
vector<int> numTimes;
getline(cin, sentence)。
vector<string> words = separate(句子)。
for(size_t i = 0; i < words.size(); i ) {
for(size_t j = 0; j < words.size(); j ) {
if(words[i] == words[j]) {
count ;
}
}
numTimes.push_back(count)。
}
for(size_t k = 0; k < words.size(); k ) {
cout << words[k] << " - " << numTimes[k] << endl;
}
return 0;
}
sentence是什么意思? 沒有英陳述句子以'.'或其他什么結尾的概念:./a.out
a bc d
a - 1
bc - 2
d - 3
./a.out
a a b
a - 2
a -4
b - 5
