2

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

/////////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

4 回答 4

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
于 2013-05-13T18:40:11.673 回答
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;
}
于 2013-05-13T18:41:05.947 回答
2

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

#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');
于 2013-05-13T20:09:46.743 回答
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;
}

或者

#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;
}
于 2013-05-13T18:52:47.577 回答