菜鸟求教 运行结果总是not equal

gdczsue 2012-11-05 12:56:05
Description

给出两个字符串a和b,把a和b所含的所有空格去掉之后,判断a是否与b相等。

Input


输入的第一行是一个正整数n,表示测试用例的个数。

接下来2n行,每两行表示一组测试数据:第一行是字符串a、第二行是字符串b。

0 <= |a|, |b| <= 100000


Output

为每个测试用例输出一行结果:如果去掉空格后,a==b,则输出 equal,否则输出 not equal 。

Sample Input


2
abc
a b c
ab c
a tc

Sample Output


equal
not equal
我的代码如下
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k,n;
char a[100000],b[100000],M[100000],N[100000];
while(scanf("%d",&n)!=EOF)
{
getchar();
for(k=0;k<n;k++)
{
gets(a);
for(i=0,j=0;a[i]!='\0';i++)
{
if(a[i]!=' ')
{
M[j]=a[i];
j++;
}
}
gets(b);
for(i=0,j=0;b[i]!='\0';i++)
{
if(b[i]!=' ')
{
N[j]=b[i];
j++;
}
}
if(strcmp(M,N)==0)
printf("equal\n");
else
printf("not equal\n");
}
}
return 0;
}
...全文
363 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
aperson111 2012-11-05
  • 打赏
  • 举报
回复
可以用正则表达式,将所有空格替换,然后比较2个字符串么
chenpengyu86 2012-11-05
  • 打赏
  • 举报
回复

#include <iostream>
#include <string>
using namespace std;

bool strEqual(const string& lhs, const string& rhs) {
    int lLen = lhs.length();
    int rLen = rhs.length();
    int i = 0, j = 0;
    while (i < lLen && j < rLen) {
        while (' ' == lhs[i] && i < lLen)
            ++i;
        if (i == lLen)
            break;
        while (' ' == rhs[j] && j < rLen)
            ++j;
        if (j == rLen)
            break;
        if (lhs[i] != rhs[j])
            return false;
        else {
            ++i;
            ++j;
        }
    }
    if (i == lLen && j < rLen) {
        while (' ' == rhs[j])
            ++j;
        return j == rLen;
    }
    if (j == rLen && i < lLen) {
        while (' ' == lhs[i])
            ++i;
        return i == lLen;
    }
    return true;
}


int main(int argc, char* argv[]) {
    if (argc != 3)
        return -1;
    string lhs = argv[1];
    string rhs = argv[2];
    cout << strEqual(lhs, rhs) << endl;
    return 0;
}
Burcy Wen 2012-11-05
  • 打赏
  • 举报
回复
每个for循环结束后需要再每个数组后加上字符串结束符'\0',否则在strcmp()比较时,无法判断字符后的元素(因为没有输入所以为随机值);或者在char a[100000],b[100000],M[100000],N[100000]对M,N数组进行初始化也可以。
图灵狗 2012-11-05
  • 打赏
  • 举报
回复
虽然你的程序不是十分正确,不过用GCC编译运行后,结果还是有正确的: 2 abc a b c equal ab c a tc not equal
慧钦 2012-11-05
  • 打赏
  • 举报
回复
M[] N[]没加结束符 分别在for循环体后紧接, M[j] = '\0'; N[j] = '\0'; 另外字符数组空间应该开得比100000大一点如100001或100010
恨天低 2012-11-05
  • 打赏
  • 举报
回复
你调试了吗?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧