C++;程序,以采取2句话,并找到共同的字母? 我试图用C++编写一个程序,在用户输入的2个句子中找到共享的字母,我输入的代码在下面,但是由于某种原因,它不起作用,函数必须返回两个句子之间的所有共享字母。提前谢谢 #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; int findSharedLetters(常量字符行1[],常量字符行2[]); void main() { 字符行1[100],行2[100]; cout

C++;程序,以采取2句话,并找到共同的字母? 我试图用C++编写一个程序,在用户输入的2个句子中找到共享的字母,我输入的代码在下面,但是由于某种原因,它不起作用,函数必须返回两个句子之间的所有共享字母。提前谢谢 #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; int findSharedLetters(常量字符行1[],常量字符行2[]); void main() { 字符行1[100],行2[100]; cout,c++,arrays,string,function,character,C++,Arrays,String,Function,Character,一旦找到一个字母对,您将从函数返回。 将字母存储在字符串中,然后返回该字符串 #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

一旦找到一个字母对,您将从函数返回。 将字母存储在字符串中,然后返回该字符串

#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] = '\0'; // make sure it's empty
  line2[0] = '\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]=='\0')) { // if empty space detected, it skips
        returnLine += line1[i]; // add matching char to string
        }
    }
  }
  return returnLine; //return the string
}
#包括
#包括
使用名称空间std;
字符串查找共享字母(常量字符行1[],常量字符行2[]);
int main(int argc,const char*argv[]
{
字符行1[100],行2[100];
第1行[0]='\0';//确保它是空的
第2行[0]='\0';//确保它是空的

cout一种可能的解决方案是基于使用类
std::string
std::set
和标准算法
std::set\u交叉

下面是一个示例程序

#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;
}
相对于字母,解决方案区分大小写

如果您只需要查找案例中的常见字母字符,那么任务将更加复杂

下面是如何使用与上面相同的容器和算法来完成的

#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;
}

看。嗨,欢迎来到StackOverflow。这不是它的工作原理,当你执行程序时会发生什么,你期望什么,为什么?你想得到多少个普通字母?你总是提供相同长度的句子吗?句子最多可以有100个字符,用户可以对每个句子有不同的长度,我正在尝试f查找两个句子之间的所有常用字母。@KareemYoussef您的程序只能处理99个字符的句子。使用排序语句:“a”和“a”或“a”/“b”测试您的程序,然后稍微长一点:“ab”/“ab”、“ab”/“ba”、“aaabccc”/“dddaeee”…谢谢你的回答!你能解释一下你在函数中做了什么吗?因为我似乎不知道它是如何工作的,还有没有一种不用sizeof函数就可以完成的方法?你可以用值代替sizeof函数。比如(int i=0;i
#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