对不起标题,但我真的不知道问题是什么。代码看起来像那样(这里没有意义,但是在更大的项目中有,所以请不要问"你为什么要这样做......")
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
string sort (string slowo){
string litery = slowo;
for (int i=0; i<litery.length()-1; i++)
for (int j=0; j<litery.length()-1; j++)
if (litery[j]>litery[j+1])
swap(litery[j], litery[j+1]); // (3)
return litery;
}
int main()
{
fstream wordlist;
wordlist.open("wordlist_test",ios::in);
vector<string> words;
while (!wordlist.eof()){ // (4)
bool ok = true;
string word;
getline(wordlist,word);
string sorted = sort(word);
if (ok){
cout<<word<<endl; // (1)
words.push_back(word);
}
}
for (int i = 0; i<words.size(); i++){
cout<<words[i]<<endl; // (2)
}
}
文件中有单词&#34; wordlist_tests&#34;。最后的程序应该将它们写入向量并将向量中的内容写入标准输出。问题是:
现在迭代(可能仅适合我)部分:
有两种方法可以做到:
就像这样:
int tmp = 0;
while (tmp < 5){
tmp++;
/..../
这段代码有什么问题?我应该怎么做才能将这些单词写入vector但仍然对它们进行排序并使用while while循环?我找不到这些东西之间的联系(好吧,我看到那个连接是变量字,但我不知道以什么方式)。任何帮助欣赏。
答案 0 :(得分:3)
swap()
,""
会发生什么?litery = ""
。0
迭代到(unsigned) 0 - 1
,这是一个非常大的数字。if (litery[0] > litery[1])
litery[1]
将访问空字符串的末尾,这会导致未定义的行为。常见的解决方法是从1
迭代到string.length()
。这是一个例子:
string sort (string litery){
for (int i=1; i<litery.length(); i++)
for (int j=1; j<litery.length(); j++)
if (litery[j-1]>litery[j])
swap(litery[j-1], litery[j]);
return litery;
}