字符串最后一個單詞的長度


/**
* Copyright (C) 2014, CSU
* All rights reserved
* File Name:test.cpp
* Author: lmm
* Date of completion: 2015/1/12
* Version: v1.0
*
* 問題描述:字符串最后一個單詞的長度

* 輸入描述: 計算字符串最后一個單詞的長度,單詞以空格隔開,一行字符串,長度小於128,例如 輸入“I am a student”
* 知識點 : 字符串,循環
* 程序輸出: 輸出整數N,最后一個單詞的長度
*/

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cctype>
using namespace std;
int main()
{
char str[128] = "";
gets(str);
int length_str = strlen(str);// 字符串長度
int length_word = 0;// 單詞長度
int spaceSum = 0;// 非字母的字符
for (int i = length_str-1; i >=0; --i)
{
if ((str[i] == ' ')||(!isalpha(str[i])))
{
spaceSum++;

}
else
break;
}
for (int i = length_str-spaceSum-1; i >=0; --i)
{
if ((str[i] == ' ')||(!isalpha(str[i])))
{

break;
}
else
{
length_word++;
}
}
cout << length_word << endl;
return 0;
}

注意:剛開始覺得此題簡單,也好久沒寫代碼了,其則分析時候沒考慮周到,則容易出現錯誤。

錯誤原因:1.沒有考慮最后一個單詞還有空格                   例如:hello world(空格)
            2.沒有考慮最后一個單詞還有多個空格           例如:hello world(多個空格)
          3.假如最后單詞的字母存在非字母的情況       例如:hello wor*ld(多個空格)*&(空格)#@
總結:1.一個問題邏輯分析比寫代碼更重要                                              

            2.代碼實現要選擇各種情況下的測試用例,測試用例的選擇前提分析到位,考慮到各種情況。

            3.可以使用C++函數,例如統計字母的個數isalpha(),則方便很多。

            4.cctype頭文件中很多函數可以運用到代碼中

      

isalnum(c)  //如果c是字母或數字,則為true
isalpha(c) //如果c是字母,則為true
iscntrl(c) //如果c是控制字符,則為true
isdigit(c) //如果c是數字,則為true
isgraph(c) //如果c不是空格,則為true
islower(c) //如果c是小寫字母,則為true
isprint(c) //如果c是可打印字符,則為true
ispunct(c) //如果c是標點符合,則為true
isspace(c) //如果c是空白符合,則為true
isupper(c) //如果c是大寫,則為true
isxdigit(c) //如果c是十六進制數,則為true
tolower(c) //如果c是大寫字母,則返回其小寫字母形式,否則直接返回0
toupper(c) //如果c是小寫字母,則返回其大寫寫字母形式,否則直接返回0



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com