首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++编程——关于缩写解决思路

2012-03-13 
c++编程——关于缩写题目:关于字符缩写的问题,每个字符由若干个单词组成,每个单词之间用空格隔开,每个单词只

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'(换行符)。 
你用的第二种形式,按一次回车相当于终结符,终结输入。

[解决办法]

探讨
getline的两种形式:
getline ( istream&amp; is, string&amp; str, char delim );
getline ( istream&amp; is, string&amp; str );
其中:delim 为终结符,第二种形式 delim默认为 '\n'(换行符)。
你用的第二种形式,按一次回车相当于终结符,终结输入。

[解决办法]
楼主,首先你的错误之一
用cin >> s1,输入,只能输入一个单词,不能输入几个用空格隔开的单词
所以得用getline
然后,程序开头你用k设置循环比较的次数,在cin>>k之后,你输入一个数字,然后按回车代表结束,这个时候数字读给了k<回车会留着,下一个是getline来读,第一个getline会读了这个空格而结束,,所以,在cin>>k后面,要设法跳过这个回车,用cin.ignore()就行。完整代码如下

# include <iostream>
# include <stdio.h>
# include <string>
using namespace std;
int main()
{
int k;
char l;
cin >> k;
cin.ignore();
for(int i =0;i < k;i++){
cout << "输入两个字符串" << endl;
string s1,s2,t1,t2;
getline(cin,s1);
getline(cin,s2);
cout <<"s1 ,s2----" << s1 << "----" << s2 << endl; 
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];
}
}
cout <<"t1 ,t2----" << t1 << "----" << t2 << endl; 
if(t1 == t2)printf("SAME\n");
else printf("DIFFERENCE\n");
}
system("pause");
return 0;
}

LZ,这样的答案还满意吗?按着你的思路改的,如果可以的话就赏几分吧,嘻嘻

热点排行