我在这个程序中有一个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()无法正常工作。我做错了是否有另一种方法可以用来查找添加了空格的字母数。感谢。
答案 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
。