【发布时间】:2021-10-29 06:46:08
【问题描述】:
我的问题与 LeetCode 中的 "longest common prefix" 问题有关。(https://leetcode.com/problems/longest-common-prefix/)
这是我的代码:
#include <string>
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
int cnt = 0;
string result = "";
char ch = ' ';
char standard = ' ';
for(int i=0; i<strs.size(); i++){
if(strs[i].size() == 0) return result;
}
if(strs.size() == 1){
return strs[0];
}
while(1){
standard = strs[0][cnt];
for(int i=0; i<strs.size(); i++){
ch = strs[i][cnt];
if(ch == '\0' || ch != standard) return result;
}
result+=ch;
cnt++;
}
}
};
在迭代向量的字符串元素中的每个字符时,我尝试通过使用代码来处理字符串向量中的所有元素完全相等的异常
if(ch == '\0'...)
但是我了解到 C++ 中的字符串类在字符串的末尾不包含空字符,所以我认为这段代码不起作用,因为我编写的代码毫无意义。
但是为什么这段代码可以工作...?
C++ 是否会自动将空字符放入字符串向量的元素中而不放入字符串中?
【问题讨论】:
-
从 C++11 开始,读取“过去”字符串的最后一个字符会产生空字符。在此之前,行为是未定义的。
-
@molbdnilo 那么你的意思是仅仅访问字符串的最后一个字符会自动在字符串的末尾附加空字符吗?
-
不,我的意思只是
s[s.size()]返回(引用)空字符。 (而且,从this 来看,我错了;显然,阅读该角色一直是明确定义的。)