【发布时间】:2014-05-10 17:32:45
【问题描述】:
所以我的班级有一个硬件问题,我必须存储十个名字,将它们大写,然后按字母顺序排序。我们刚开始使用字符串,有些事情对我来说仍然有点困惑。此代码可以将所有名称存储在字符串数组中,但大写字母似乎不起作用。我不确定,但我认为这是因为我有第二个循环运行上限次数,即 10 次。而且由于并非每个字符串都有 10 个元素,所以我遇到了问题?..是它还是是别的吗?好吧,我尝试使用 .length (函数?)来解决此问题,以查找数组中每个名称的长度,但我总是出错。任何帮助表示赞赏,谢谢!
#include<iostream>
#include<string>
using namespace std;
void UpperCase(string names[],int cap);
void print(string names[],int cap);
void swap(string names[],int &x,int &y);
string names[10];
int main(){
char a;
cout<<sizeof(a);
for(int i=0;i<10;i++){
cout<<"Enter a name for student "<<i+1<<" : ";
cin>>names[i];
cout<<endl;
}
UpperCase(names,10);
cout<<endl;
print(names,10);
cout<<endl;
print(names,10);
return 0;
}
void print(string names[],int cap){
for(int i=0;i<cap;i++)
cout<<names[i]<<endl;
}
void UpperCase(string names[],int cap){
for(int student=0;student<cap;student++){
for(int letter=0;letter<names[student].length();letter++){
if(names[student][letter]>='a')
names[student][letter]-=('a'-'A');
}
}
}
【问题讨论】:
-
STL 不在问题范围内吗?
-
你是对的,
cap是UpperCase()中内部循环的错误终止条件,.length()是正确的,所以请显示你的代码。另外:如果名称中包含字符a会怎样? -
有趣的是,您将使用
std::string,然后使用数组而不是更高级的容器类。 -
我应该提到两件事:也许this article 会帮助你(提示:空终止符)。其次,
UpperCase中的 if 语句也不会检查它是否为> 'z'。 -
我认为 T.C. 的回答非常有帮助,但总的来说,如果您具体告诉我们什么不起作用,它会有所帮助。它编译了吗?跑了吗?它产生了输出吗?如果是这样,它到底有什么问题?如果其中任何一个步骤失败,我们必须知道在哪里以及以何种方式。我敢肯定,如果您提供这些信息(例如,学习如何使用调试器并获取堆栈跟踪),那么您自己解决问题的方法就大半了。