2013-04-16 65 views
-3

下面的代码尝试输入多个字符串与空白,然后我需要做他们之间的比较。我面临的问题是,它不能输入超出第一个字符串的字符串。我想这是输入缓冲区中的“输入”,导致这种行为,即跳过字符串的进一步输入。任何建议如何克服这一点?输入多个字符串C++

Refered:How to cin Space in c++?

编辑:清除和冲洗我曾尝试,但仍然同样的问题。 我需要实现C风格的字符串函数,所以不能使用字符串类,strcmp等函数必须由我来实现,而不是使用库函数。

int main() 
    { 
     char s[100]; 
     char s1[100]; 
     char s2[100]; 
     char* sub; 

     struct countSpaces cs; 



cout << "Enter a String : "; 
cin.get(s, 100); 
std::cin.clear(); 
cs=count(s); 

cout << s << " contains " << cs.letters << " letters and " << cs.spaces << " spaces" << endl; 
cout << "Length of " << s << " is " << strlen(s) << endl; 

cout << "Enter First String : "; 
cin.get(s1, 100); 
std::cin.clear(); 
cout << "Enter second String : "; 
cin.get(s2, 100); 
std::cin.clear(); 

     if(strcmp(s1,s2)) 
     cout << s1 << " is equal to " << s2 << endl; 
     else 
     cout << s1 << " is not equal to " << s2 << endl; 


     return 0; 
     } 

输出:

$ ./String 
Enter a String : Herbert Schildt 
Herbert Schildt contains 14 letters and 1 spaces 
Length of Herbert Schildt is 15 
Enter First String : Enter second String : is not equal to 
+0

只是通过搜索'[C++] cin缓冲区'或'[C++] cin跳过',这是一个和其他许多人的重复。所以-1没有研究工作。另外考虑使用'std :: string'而不是C字符串,可能存在缓冲区溢出问题。 – Rapptz

+0

@Rapptz我已经尝试刷新输入流(刷新和清除),但仍然是同样的问题。我不明白你的-ve投票,我也必须手动实现C类型的字符串函数,这就是为什么不使用C++字符串。将感谢解决方案,而不是-ve投票。 –

+1

[这是非常基本的](http://ideone.com/uQpXIp)。 – Rapptz

回答

0
#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string s1 = ""; 
    string s2 = ""; 

    cout << "Enter first string > "; 

    getline(cin, s1); 

    cout << "Enter second string > "; 

    getline(cin, s2); 

    if(strcmp(s1,s2)) 
     cout << s1 << " is equal to " << s2 << endl; 
    else 
     cout << s1 << " is not equal to " << s2 << endl; 

    // copy string s1 into C-String str 
    char * str = new char [s1.length()+1]; 
    std::strcpy (str, s1.c_str()); 

    return 0; 
} 
+0

这甚至会做什么?发布之前您是否尝试过运行它? – Rapptz

+0

我不必使用字符串类,我需要实现空字符串函数,如string.h库。 –

+0

@Rapptz <<它说:使用字符串和getline,而不是他上面的混乱。 @Gaurav K <<'string a =“string”; a.c_str();'将从字符串 –

-1

std::cin.ignore(100,'\n');的伎俩。

+0

返回您需要的以空字符结尾的C字符串。如果您添加注释以解释您的代码行的作用,将会很有帮助。 –