当出现空格时,C ++ .length()会停止计算字母数

时间:2014-02-18 13:33:49

标签: c++

我在这个程序中有一个while循环。我想要它,以便它运行程序与用户输入中的字母一样多。这在用户输入中没有空格时有效,但是当有空格时,它会在空格出现时停止计算字母数。这是完整的代码:

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

vector<string> cons = {"b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q",    "r", "s", "t", "v", "w", "x", "y"};
vector<string> vowel = {"a", "e", "i", "o", "u"};
int count_val = 0;
string user_translate;

int main(){
    cout << "Enter the word you want translated: ";
    cin >> user_translate;
    while(count_val < user_translate.length()){
        if(user_translate[count_val] == ' '){
            cout << "No sentences!";
        }
        cout << user_translate.length();
        ++count_val;
    }
    return 0;
}

我不确定为什么.length()无法正常工作。我做错了是否有另一种方法可以用来查找添加了空格的字母数。感谢。

4 个答案:

答案 0 :(得分:4)

string str;
std::getline(cin,str);
int len = str.length();

这样你就可以获得具有空白区域的实际长度。

std::cin>> str; //一旦第一个空格出现在字符串中,就不会读取读取的字符串。

如果您的字符串想要使用My name is Mama输入字符串std::cin>>str;,则只会存储str = "My"

答案 1 :(得分:1)

我假设你要么没有在空间中阅读,要么意外地将它们修剪掉。 第一种情况更有可能。

答案 2 :(得分:1)

http://en.cppreference.com/w/cpp/string/basic_string/operator_ltltgtgt

operator&gt;&gt;(std :: istream,std :: string)将字符读入字符串,跳过前导空格

  

直到满足以下条件之一:

     
      
  • 读取N个字符,其中N是stream.width()if stream.width()&gt; 0,否则N是string.max_size()
  •   
  • 文件结束条件发生在流
  • 中   
  • std :: isspace(c,is.getloc())对于流中的下一个字符c为true。
  •   

因此,流&gt;&gt; string不会将空格放入字符串中。

答案 3 :(得分:0)

默认情况下,

cin会跳过所有whitespace (spaces, tabs, new lines, etc.) 您可以使用nowskips更改其行为。

我建议使用get

  

cin.get(user_translate,n);

如果找到newline char (\n) or after n-1 chars

get将停止从流中检索字符 现在,您可以使用user_translate.length