用C++程序提取两个句子,找出常见的字母
C++ program to take 2 sentences and find common letters?
我正试图用c++编写一个程序,在用户输入的两个句子中查找共享字母,我输入的代码如下,但由于某种原因,它不起作用,函数必须返回这两个句子之间的所有共享字母。提前感谢!
#include<iostream>
#include<cstring>
using namespace std;
int findSharedLetters(const char line1[], const char line2[]);
void main()
{
char line1[100] , line2[100];
cout<<"Enter line 1 : ";
cin.getline(line1 , 100);
cout<<"Enter line 2 : ";
cin.getline(line2 , 100);
char result = findSharedLetters(line1,line2);
cout<<"shared letters : "<<result<<endl;
system("pause");
}
int findSharedLetters(const char line1[], const char line2[])
{
for(int i = 0;i<line1[100];i++)
{
for(int x = 0;x<line2[100];x++)
{
if(line1[i] == line2[x])
{
return line1[i];
}
}
}
}
一种可能的解决方案是基于使用类std::string
和std::set
以及标准算法std::set_intersection
这是的一个示例程序
#include <iostream>
#include <string>
#include <set>
#include <algorithm>
#include <iterator>
std::set<char> FindSharedLetters( const std::string &s1, const std::string &s2 )
{
std::set<char> st1( s1.begin(), s1.end() );
std::set<char> st2( s2.begin(), s2.end() );
std::set<char> st0;
std::set_intersection( st1.begin(), st1.end(),
st2.begin(), st2.end(),
std::inserter( st0, st0.end() ) );
return ( st0 );
}
int main()
{
std::string s1( "DCAB" );
std::string s2( "FRDC" );
for ( char c : FindSharedLetters( s1, s2 ) ) std::cout << c << ' ';
std::cout << std::endl;
return 0;
}
输出为
C D
该解决方案相对于字母区分大小写。
如果您只需要在案例中查找独立的常见字母字符,则任务会更加复杂。
以下是如何使用与上述相同的容器和算法来完成
#include <iostream>
#include <string>
#include <set>
#include <algorithm>
#include <iterator>
#include <cctype>
std::set<char> FindSharedLetters( const std::string &s1, const std::string &s2 )
{
std::set<char> st1;
std::set<char> st2;
for ( char c : s1 )
{
if ( std::isalpha( c ) ) st1.emplace( std::toupper( c ) );
}
for ( char c : s2 )
{
if ( std::isalpha( c ) ) st2.emplace( std::toupper( c ) );
}
std::set<char> st0;
std::set_intersection( st1.begin(), st1.end(),
st2.begin(), st2.end(),
std::inserter( st0, st0.end() ) );
return ( st0 );
}
int main()
{
std::string s1( "12dCAB$" );
std::string s2( "#FRDc12" );
for ( char c : FindSharedLetters( s1, s2 ) ) std::cout << c << ' ';
std::cout << std::endl;
return 0;
}
同样,输出是
C D
一旦找到一个字母对,就会从函数返回。将字母存储在字符串中,然后返回该字符串。
#include <iostream>
#include<cstring>
using namespace std;
std::string findSharedLetters(const char line1[], const char line2[]);
int main(int argc, const char * argv[])
{
char line1[100] , line2[100];
line1[0] = ' '; // make sure it's empty
line2[0] = ' '; // make sure it's empty
cout<<"Enter line 1 : ";
cin.getline(line1 , 100);
cout<<"Enter line 2 : ";
cin.getline(line2 , 100);
std::string result = findSharedLetters(line1,line2); // function returns string now
cout<<"shared letters : "<<result<<endl;
// removed system("pause"); as my compiler cried...
return 0;
}
std::string findSharedLetters(const char line1[], const char line2[]){
std::string returnLine = ("");
for(int i = 0;i<(sizeof(line1)/sizeof(*line1));i++) // iterate through size of array
{
for(int x = 0;x<(sizeof(line2)/sizeof(*line2));x++) // iterate through size of array
{
if(line1[i] == line2[x])
if (!(line1[i]==' ')) { // if empty space detected, it skips
returnLine += line1[i]; // add matching char to string
}
}
}
return returnLine; //return the string
}
相关文章:
- 如何删除peer if else分支中的冗长句子
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- C++如何在向量中查找最常见的元素
- Printf 命令不打印时添加了查找常见除数的新代码
- 在输入句子时终止 std::out_of_range
- 如何从向量或数组中选择最常见的数字?(前五名)C++
- 使用 C++ 验证 NMEA 句子
- 分析包含 NMEA 句子的日志文件C++
- 打印二叉树中的常见元素
- 是否存在用于 C 或 C++ 中常见数学运算(例如最小值、最大值和平均值)的可导入库?
- 在 C++ 的自定义运算符中删除与删除[](不同于常见的删除与删除[]问题)
- 如何从文本文件中查找最常见的字母和出现次数?
- Vscode/C++ - cout 无法输出完整的句子,也无法与整数连接
- 对类的未定义引用,常见答案尚未解决
- 如何理解句子的生命周期始于对e的评估
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- 查找字符串中最常见的字母
- C++从句子中删除给定字符的程序不起作用
- 访问位域联合是C++标准中常见的初始数据未定义行为
- 用C++程序提取两个句子,找出常见的字母