佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1575|回复: 10

课业问题!求教关于string compare

[复制链接]
发表于 20-7-2012 12:17 AM | 显示全部楼层 |阅读模式
问题:我先set 一个 char array,char word[]="rogrammingconcept"然后要求user input 一个 string。。然后和我先前set好的char array compare对看是否相同。

假如我enter “gramming”,过后用 for loop来loop我的compare,里面有if else做checking,就会一直loop到 char word[3]的g,if else statement 就check 到对字。。然后我的loop却会auto从新loop过。。。这样我根本无法check全部我enter字体!有什么coding是个以当 if else check到对的时候。。还会继续check下一个字!
拜托各位帮帮小弟忙!万分感激
回复

使用道具 举报


ADVERTISEMENT

发表于 20-7-2012 10:41 AM | 显示全部楼层
假如我enter “gramming”,过后用 for loop来loop我的compare,里面有if else做checking,就会一直loop到 char word[3]的g,if else statement 就check 到对字。。然后我的loop却会auto从新loop过。。。这样我根本无法check全部我enter字体!有什么coding是个以当 if else check到对的时候。。还会继续check下一个字!
b8b8b8b8 发表于 20-7-2012 12:17 AM


不明白你的问题…… =.="
回复

使用道具 举报

发表于 20-7-2012 12:56 PM | 显示全部楼层
大概看得懂,你要的是contain/find 不是compare,没必要用char一个个查那么麻烦啦。

不懂你是要什么语言。

c++:  find
c#, java: contains
c: strstr
回复

使用道具 举报

发表于 20-7-2012 04:19 PM | 显示全部楼层
试下用if else statement 来 compare 你的 array 。 如果true 的话,compare 你那个word[xx] array , 再用loop++ 你的 xx
回复

使用道具 举报

 楼主| 发表于 20-7-2012 07:24 PM | 显示全部楼层
回复 3# littlepenguin


   我的是普通c++。我拍的题目照片不是很明。我用写好了!题目是user要更新password。题目已经set好两个array.
1) char oldPass[20]="My~Password";
1) char special[]="~!@#$%^&*_-+|";
更新password有几个条件
1)新password里必须存在最少一个set好的special character
2)新password不可以有3个连续的字体跟oldPass一样
例如
我enter MyPass#001,答案是错!因为enter新的password "MyPass"里Pass是跟oldPass里的Pass一样。
enter My~Pwd#001,错!因为MY~P是已近超过3个连续字体是跟oldPass里的字体一样。
老师给的提示是用string length 和 string compare。
sem2老师刚教string compare之类东西我没专心听,结果来到sem4 array出string compare就去荷兰
回复

使用道具 举报

发表于 21-7-2012 12:55 PM | 显示全部楼层
本帖最后由 andy5627 于 21-7-2012 12:57 PM 编辑
b8b8b8b8 发表于 20-7-2012 07:24 PM
回复 3# littlepenguin

我的logic :
首先是要loop你的input password,
然后nested loop old password 和 special characters 来做checking。
用来做checking condition, 你需要declare一个boolean和一个counter来,打个比方:

比如:
boolean foundSpecial = false;
int similiar = 0;
  1. for(int i=0; i<20; i++) {     // let say你的char限于20个
  2.     if(similiar < 3) {     // 用于查是不是跟old password有一样的
  3.         for(int j=0; j<20; j ++){
  4.             if(strcmp( newPass[i], oldPass[j]) == 0){
  5.                  similar++;
  6.                  break;
  7.              }
  8.              else{
  9.                  similiar = 0;
  10.              }
  11.         }
  12.     }
  13.    
  14.     if( !foundSpeical ) {
  15.          for(int k=0; k<13; k++) {  // loop special characters
  16.              if(strcmp( newPass[i], special[k] ) == 0 ){
  17.                  foundSpecial = true;
  18.              }
  19.          }
  20.     }
  21. }
复制代码
大概是这样,没有试过跑,不知道有没有bug,给你作为参考。
回复

使用道具 举报

Follow Us
发表于 21-7-2012 08:14 PM | 显示全部楼层
本帖最后由 littlepenguin 于 21-7-2012 08:17 PM 编辑
b8b8b8b8 发表于 20-7-2012 07:24 PM
回复 3# littlepenguin

如果要全部用char的话,用原始的方法咯。因为我习惯用string,char很少用。
  1. const char oldPass[20]="My~Password";
  2. const char newPass[]="MyPass#001";
  3. const char special[]="~!@#$%^&*_-+|";
  4. bool fail = false;

  5. int length = sizeof newPass;

  6. for(int i = 0; i<length; i++)
  7. {
  8.         for(int j = 0; j< 13; j++)
  9.         {
  10.                 if(newPass[i] == special[j])
  11.                 {
  12.                         fail = true;
  13.                         break;
  14.                 }
  15.         }
  16. }

  17. if(!fail)
  18. {
  19.         length -= 2;
  20.         for(int i = 0; i<length; i++)
  21.         {
  22.                 for(int j = 0; j <18; j++)
  23.                 {
  24.                         if(newPass[i] == oldPass[j] && newPass[i+1] == oldPass[j+1]&& newPass[i+2] == oldPass[j+2])
  25.                         {
  26.                                 fail= true;
  27.                                 break;
  28.                         }
  29.                 }
  30.         }
  31. }

  32. if(fail)
  33.         cout<<"Invalid";
  34. else
  35.         cout<<"Valid";
复制代码
回复

使用道具 举报

发表于 21-7-2012 08:21 PM | 显示全部楼层
andy5627 发表于 21-7-2012 12:55 PM
我的logic :
首先是要loop你的input password,
然后nested loop old password 和 special characters  ...

因为楼主要求的是3个char连在一起, 不是分开的。

回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 22-7-2012 11:26 AM | 显示全部楼层
littlepenguin 发表于 21-7-2012 08:14 PM
如果要全部用char的话,用原始的方法咯。因为我习惯用string,char很少用。

谢谢你!我回家后尝试看。。有问题再请教您
回复

使用道具 举报

发表于 30-8-2012 11:42 AM | 显示全部楼层
类似这样,改一改

#include<iostream>
#include<string>
using namespace std;
void test(char* abc, char* def,int i)
{
        for(int t = 0;t<i;t++)
        {
                if (*(abc+t) != (*(def+t)))
                        cout<<"NO"<<endl;
                else
                        cout<<"Yes"<<endl;
        }
}
int main()
{
        char z[] = "APPLE";
        char x[256], *px, *pz;
        pz = z;
        px = x;
        cout<<"Enter a string";
        cin>>x;
        test(px,pz,5);
}
回复

使用道具 举报

发表于 8-9-2012 11:46 AM | 显示全部楼层
因该是用string index,如果没错。java的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 20-10-2025 08:36 AM , Processed in 0.116926 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表