c++编程——关于缩写
题目:关于字符缩写的问题,每个字符由若干个单词组成,每个单词之间用空格隔开,每个单词只有首个单词大写,如International Bussine Machines的缩写是IBM,比较两个字符串缩写是否一样,一样就输出same,不一样就输出difference。如以下例子
1 //表示共几组
2 //表示这组第一个字符串有两个单词
Asss Asss
2 //表示这组第二个字符串有两个单词
Arrrd Ads
输出SAME。
以下代码哪里不对,我感觉应该是判断是否为大写那个地方,求大神指教,谢谢!
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
int k;
cin>>k;
for(int i=0;i<k;i++)
{
int a,b;
string s1,s2,t1,t2;
cin>>a;
cin>>s1;
cin>>b;
cin>>s2;
int p,q,m,n;
for(p=0;p<s1.size();p++)
{
if(s1[p]>='A'&&s1[p]<='Z')
{
t1+=s1[p];
}
}
for(q=0;q<s2.size();q++)
{
if(s2[q]>='A'&&s2[q]<='Z')
{
t2+=s2[q];
n++;
}
}
if(t1==t2)printf("SAME\n");
else printf("DIFFERENCE\n");
return 0;
}
}
[解决办法]
我说过了,楼主
cin>>a;//这儿输入2对吧
cin>>s1;//这儿输入Asss Asss,但是s1只会读入Asss,所以s1 = Asss,后面的被留在了缓冲区
cin>>b;//这儿会从缓冲区读入一个A吧。。。
cin>>s2;//这儿会读入sss
所以你的比较就可想而知了。。。。因为cin会在空格处断开
[解决办法]
getline的两种形式:
getline ( istream& is, string& str, char delim );
getline ( istream& is, string& str );
其中:delim 为终结符,第二种形式 delim默认为 '\n'(换行符)。
你用的第二种形式,按一次回车相当于终结符,终结输入。
[解决办法]