c ++无法获得正确的字符串输入

时间:2013-05-13 18:32:28

标签: c++

我是编程的新手,只是编写了这个简单的函数来计算字符串的长度,但我无法正确地从用户那里获取输入字符串(尝试了我的替代方案)。

/////////Function to calculate length of a string////////////////////
void str_length(){
    char str[30];
    int counter=0;
    cout << "Enter string: ";
    gets(str);
    //cin.getline(str,256);
    //cin >> str;
    for(int i=0;str[i] != '\0';i++){
        counter++;
    }
    cout << "String length is: " << counter << endl;
}
///////////////////////////////////////////////////////////////

程序要么突然退出,要么以'cin'退出,我只能在第一个空格中获得部分字符串。

4 个答案:

答案 0 :(得分:3)

如果您尝试cin.getline(str,256),则需要将缓冲区声明为char str[256]

然而,你不应该真正参与这些事情。坚持std::string

std::string str; // Declare a string
std::getline(std::cin, str); // Get a line from the std::cin stream and put it in str
unsigned int stringLength = str.length(); // get the length of the string

答案 1 :(得分:3)

为什么不使用std::string库。它很好用,也很容易使用。

void str_length()
{
   std::string line;
   std::cout << " Please input current line: " << std::endl;
   std::getline(std::cin, line);
   std::cout << "the length of input string is: " << line.length() <<std::endl;
}

答案 2 :(得分:2)

我只能同意我之前的演讲者,并建议您使用std::string来使用更好的变体。不过,如果你真的想使用C-String,你可以使用这种方法: std::cin.get(char *s, streamsize n) 此方法读入字符,直到您按下确定按钮。

#include<iostream>
#define SIZE 40;

using namespace std;

int main() {
    char str[SIZE];

    cin.get(str, SIZE-1);

    cout << str << endl;

    return 0;
}

您应该知道,如果您曾经创建过缓冲区溢出,那么在下次调用此方法时会遇到一些麻烦。问题是您的输入缓冲区将保存剩余的字符,在下次调用时,您的方法将只读取剩余的字符。要解决此问题,您必须在每次输入之前清除输入缓冲区。

最佳做法是在每个cin.get()

前面使用此代码
while(cin.get() != '\n');

答案 3 :(得分:0)

#include <iostream>

void str_length(){
    char str[30];
    std::cout<< "Enter string: ";
    std::cin>>str;
    int counter=0;
    for(counter=0;str[counter] != '\0';counter++){}
    std::cout<<"String length is "<<counter<<std::endl;
}

OR

#include <iostream>
#include <string>

void str_length(){
    std::string str;
    std::cout<<"Enter string: "<<std::endl;
    std::cin>>str;
    std::cout<<"String length is "<<str.size()<<endl;
}