测试交互函数函数
#pragma region 12.6.sayings1.cpp
//sayings1.cpp -- using expanded String class
//compile with string1.cpp
#if 1
#include <iostream>
#include"string1.h"
const int ArSize = 10;
const int MaxLen = 80;
int main()
{
using std::cout;
using std::cin;
using std::endl;
String name;
cout << "Hi,what's your name?\n";
cin >> name;
cout << name << ",please enter up to " << ArSize << " short sayings <empty line to quit>\n";
String sayings[ArSize];
char temp[MaxLen];
int i;
for ( i = 0; i < ArSize; i++)
{
cout << i + 1 << ": ";
cin.get(temp, MaxLen);
while (cin && cin.get() != '\n')
{
break;
}
if (!cin||temp[0] == '\0')
{
break;
}
else
sayings[i] = temp;
}
int total = i;
if (total > 0)
{
cout << "Here are you sayings:\n";
for ( i = 0; i < total; i++)
{
cout << sayings[i][0] << ": " << sayings[i] << endl;
}
int shortest = 0;
int first = 0;
for ( i = 0; i < total; i++)
{
if (sayings[i].lenght()<sayings[shortest].lenght())
{
shortest = i;
}
if (sayings[i]<sayings[first])
{
first = i;
}
}
cout << "Shortest saying:\n" << sayings[shortest] << endl;
cout << "First alphabetically:\n" << sayings[first] << endl;
cout << "This program used" << String::HowMany();
cout << "String object.Bye.\n";
}
else
{
cout << "Not input! Bye.\n";
}
return 0;
}
#endif
#pragma endregion
注意:较早的 get(char*,int)版本在读取空行后,返回的值不为false。然而,对于这些版本来说如果读取了一个空行,则字符串中第一个字符将是一个空字符。这个示例使用了下述代码:
if(!cintemp[0]==\0') //empty line?
break ; //i not incremented
如果实现遵循了最新的 C++标准,则if语句中的第一个条件将检测到空行,第二个条件用于旧版本实现中检测空行。
程序清单12.6中程序要求用户输入至多10条谚语。每条谚语都被读到一个临时字符数组,然后被复制到 String对象中。如果用户输入空行,break语句将终止输入循环。显示用户的输入后,程序使用成员函数length()和operator<()来确定最短的字符串以及按字母顺序排列在最前面的字符串。程序还使用下标运算符()提取每条谚语的第一个字符,并将其放在该谚语的最前面。下面是运行情况:
154

被折叠的 条评论
为什么被折叠?



