這應該讓你開始。你好像被困在如何循環使用char
值。 for
支持,因爲char
是一個整數類型。在ASCII和所有衍生字符集,則基本拉丁語大寫字母是連續的,並在英文字母的順序,這樣你可以遍歷一系列他們用減法來確定一個多遠是從'A'
- 即形成了一個自然的映射: A↔0,B↔1,... Z↔25.
我對「起始字符和結束字符之間的含義」有些疑問,所以我寫下了我認爲答案應該是的內容。例如:B和B之間有什麼? (請參閱下面的BB_should_equal_B。)這是「單元測試」的形式。
單元測試是教太晚的技術。你不需要了解太多才能開始。我使用了Google Test框架。如果您在構建庫和在項目中使用包含文件時遇到問題,或許像TA這樣的人可以幫助您。 (他們甚至可能感謝您對他們的單元測試。)
在任何情況下,你可以看到它是如何幫助定義你的目標是什麼,給你寫下一些測試值的地方。除了時髦的語法外,測試還有:
- 描述該要求的名稱。
- 測試框架聲明檢查實際值與預期(正確)值。
。
#include <cassert>
#include "gtest/gtest.h"
using namespace std;
int sumConsonants(char first, char last);
class CharSumTestFixture : public ::testing::Test {
};
TEST_F(CharSumTestFixture, AA_should_equal_zero) {
ASSERT_EQ(sumConsonants('A', 'A'), 0);
}
TEST_F(CharSumTestFixture, BB_should_equal_B) {
ASSERT_EQ(sumConsonants('B', 'B'), 'B');
}
TEST_F(CharSumTestFixture, BCD_should_equal_B_plus_C_plus_D) {
ASSERT_EQ(sumConsonants('B', 'D'), 'B' + 'C' + 'D');
}
TEST_F(CharSumTestFixture, AE_should_equal_B_plus_C_plus_D) {
ASSERT_EQ(sumConsonants('A', 'E'), 'B' + 'C' + 'D');
}
TEST_F(CharSumTestFixture, AZ_should_equal_A_through_Z_minus_A_minus_E_minus_I_minus_O_minus_U) {
auto n = 'Z' - 'A' + 1;
auto gauss = n * (n + 1)/2;
auto offset = 'A' - 1;
auto sumAZ = gauss + n * offset;
ASSERT_EQ(sumConsonants('A', 'Z'), sumAZ - 'A' - 'E' - 'I' - 'O' - 'U');
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
int sumConsonants(char first, char last)
{
// Assertions are used to communicate, during development and maintenace, already accepted pre-conditions.
// They are not for handling cases where those conditions do not exist.
assert((first >= 'A') && (first <= 'Z'));
assert((last >= 'A') && (last <= 'Z'));
int sum = 0;
for (auto letter = first; letter <= last; letter++)
{
sum += letter; // BUG must not add non-consonants
}
return sum;
}
的簡單的方法是用'for'環...... – Dmitri
我怕你誤會從分配的東西。我懷疑它的要求如此總結價值觀,但輔音的出現次數。 –
@Dmitri如何做到這一點的任何想法? Im stumped –