在包含重复字符的字符串中查找单词



我的任务是删除所有多余的空格(应保持1(,只输出那些字母重复的单词。我已经坐了一个星期了,找不到错误,也许这会对我有所帮助((我已经弄清楚了空白,但单词格式我做不到(

请帮我在我的代码中找到一个错误

如果我输入我喜欢每天踢足球,程序应该每输出足球。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main() 
{
char str[128];
printf("Write String: ");
fgets(str, 128, stdin);

int i = 0, j;

i = 0;
int start = i;
while (str[i] != '') 
{ 
if (str[i] == ' ' || str[i] == 'n') 
{ 
int end = i;
int first = start;
int first2 = start + 1;
int last = end - 1;
while (first < last) 
{ 
for (first; first < last; first++)
{
for (first2; first2 < last; first2++)
{
if ((str[first] == str[first2]) && (first != first2))
{ 
break; 
}
else 
{
if((first == last - 1) && (first2 == last - 1))
{
for (j = start; str[end] != ''; ++end)
{
str[j] = str[end + 1];
j += 1;
}
}
}
}
}
}
if (i != start) 
{
start = i + 1;
++i;
}
}
else 
{
++i; 
}
}
}

一个可能的解决方案:

  • 一次读一个单词,然后
  • 检查每个单词是否有重复的字母。如果是,请打印单词

现在,如何一次读取输入的一个单词。在下面的例子中,我使用了std::istringstream,但std::cin可以

以及,如何检查一个单词是否有重复的字母。一种简单但肯定不是最快的方法是从输入字符串创建一个集合,并检查该集合和字符串的字母数是否不相同。我已经为has_a_repeated_letter使用了lambda,但函数可以。

【演示】

#include <iostream>  // cout
#include <set>
#include <string>
#include <sstream>  // istringstream
int main() {
std::istringstream iss{"I like to play soccer every day"};
auto has_a_repeated_letter = [](const std::string& word) {
std::set<char> letters{ word.begin(), word.end() };
return letters.size() != word.size();
};
std::string word{};
while (iss >> word) {
if (has_a_repeated_letter(word)) {
std::cout << word << " ";
}
}
}
// Outputs:
//
//   soccer every

相关内容

  • 没有找到相关文章

最新更新