C++如何打印string数组中存储的单词长度,解决现有代码执行错误
问题原因分析
你代码中存在3个核心问题导致运行异常:
- 非标准可变长度数组:
string A[n]属于C语言的可变长度数组特性,C++标准并未支持,仅部分编译器做了扩展实现,可移植性差,运行时容易触发内存异常 strlen参数类型错误:strlen仅支持传入C风格的char*空终止字符串,直接传入std::string类型对象会触发类型不匹配错误,std::string本身提供了length()/size()方法可直接获取长度- 输入缓冲区残留换行符问题:
cin >> n读取数字后会在输入缓冲区留下换行符,后续逐行读取内容时会读到空行,需要先清空残留的换行符
可行实现代码
#include <iostream> #include <vector> #include <string> #include <limits> using namespace std; int main(){ int n; cout << "enter no" << endl; cin >> n; // 清空输入缓冲区残留的换行符 cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 用标准容器vector存储字符串,替代非标准可变长度数组 vector<string> words(n); for(int i = 0; i < n; i++){ // 逐行读取,支持输入带空格的单词 getline(cin, words[i]); } // 直接调用string自带的length方法获取长度 cout << words[2].length() << endl; return 0; }
测试验证
输入示例:
3 leonardo tom brad
输出结果为4,完全符合预期。
内容的提问来源于stack exchange,提问作者Abhinav Pipil
相关产品推荐
相关产品推荐

