我是编程的新手,只是编写了这个简单的函数来计算字符串的长度,但我无法正确地从用户那里获取输入字符串(尝试了我的替代方案)。
/////////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'退出,我只能在第一个空格中获得部分字符串。
答案 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;
}