#include <iostream> #include <string> #include <cstring> #include <ctype.h> std::string solution(std::string words, std::string msg){ std::string result; // TODO: int tStrLenW = words.length(); int tStrLenM = msg.length(); int tWordsFlag = 0; int tMsgFlag = 0; char* pCharText = new char[tStrLenW + 1]; memset(pCharText, ' ', tStrLenW); pCharText[tStrLenM] = '\0'; while(tStrLenW > tWordsFlag && tStrLenM > tMsgFlag) { if( words[tWordsFlag] == msg[tMsgFlag] ) { pCharText[tMsgFlag] = msg[tMsgFlag]; //strcat(pCharText, &msg[tMsgFlag]); tMsgFlag++; tWordsFlag++; } else { tWordsFlag++; tMsgFlag = 0; } } if(pCharText == msg) result = "Yes"; else result = "No"; delete[] pCharText; pCharText = nullptr; return result; } int main() { std::string words; std::string msg; getline(std::cin, words);; getline(std::cin, msg);; std::string result = solution(words, msg); std::cout<<result<<std::endl; return 0; } 程序的缺陷和不足,修改示例
时间: 2024-03-06 14:49:25 浏览: 59
程序的缺陷和不足:
1. 缺乏输入校验,需要对输入进行判断,判断输入是否为空或者是否符合要求。
2. 程序中使用了 C 风格的字符串操作函数,建议改用 C++ 的字符串操作方式。
3. 程序中使用了动态内存分配,但没有考虑释放内存的问题,可能会导致内存泄漏。
4. 程序的逻辑存在问题,如果输入的 words 和 msg 相同,也会返回 "No" 的结果。
5. 变量命名不够规范,不易理解。
修改示例:
1. 对输入进行判断,可以在输入之前添加代码进行判断,判断输入是否为空或者是否符合要求。
2. 使用 string 类型代替 char*,使用 string 的成员函数代替 C 风格的字符串操作函数。
3. 在动态内存分配之后,需要手动释放内存,防止内存泄漏。
4. 将比较字符串是否相等的语句改为使用 string 类型的比较操作符 "==",避免逻辑错误。
5. 变量命名应该具有描述性,易于理解和维护。
修改后的示例代码如下:
```
#include <iostream>
#include <string>
std::string solution(std::string words, std::string msg){
std::string result;
if (words.empty() || msg.empty()) {
return "Input is invalid!";
}
int tStrLenW = words.length();
int tStrLenM = msg.length();
int tWordsFlag = 0;
int tMsgFlag = 0;
std::string pCharText(tStrLenW, ' ');
while(tStrLenW > tWordsFlag && tStrLenM > tMsgFlag) {
if( words[tWordsFlag] == msg[tMsgFlag] ) {
pCharText[tMsgFlag] = msg[tMsgFlag];
tMsgFlag++;
tWordsFlag++;
} else {
tWordsFlag++;
tMsgFlag = 0;
}
}
if(pCharText == msg) {
result = "Yes";
} else {
result = "No";
}
return result;
}
int main() {
std::string words;
std::string msg;
std::getline(std::cin, words);
std::getline(std::cin, msg);
std::string result = solution(words, msg);
std::cout<<result<<std::endl;
return 0;
}
```
阅读全文