字符串输入格式是这样的
str1 str2
我不知道没有。预先输入的字符,因此需要存储2个字符串并获得它们的长度。 使用C风格的字符串,尝试使用scanf库函数但实际上没有成功获取长度。这就是我所拥有的:
// M W are arrays of char with size 25000
while (T--)
{
memset(M,'0',25000);memset(W,'0',25000);
scanf("%s",M);
scanf("%s",W);
i = 0;m = 0;w = 0;
while (M[i] != '0')
{
++m; ++i; // incrementing till array reaches '0'
}
i = 0;
while (W[i] != '0')
{
++w; ++i;
}
cout << m << w;
}
效率不高主要是因为memset
来电。
注意:
我最好使用std::string
,但是因为cn的25000长度输入和内存限制我切换到了。如果有一种有效的方法来获取字符串那么它会很好
答案 0 :(得分:2)
除了已经给出的答案之外,我认为你的代码有些错误:
memset(M,'0',25000);memset(W,'0',25000);
你真的是要用字符零填充字符串(值为48或0x30 [假设ASCII在某些学生下调我的答案并指出其他编码]),或者使用NUL(值为零的字符) )。后者为0
,而非'0'
scanf("%s",M);
scanf("%s",W);
i = 0;m = 0;w = 0;
while (M[i] != '0')
{
++m; ++i; // incrementing till array reaches '0'
}
如果您要查找字符串的结尾,则应使用0
,而不是'0'
(如上所述)。
当然,scanf
会为您提供0
字符串的结尾,因此无需使用0
[或'0'
填充整个字符串]
strlen
是一个现有的函数,它将给出C样式字符串的长度,并且很可能比只检查每个字符并增加两个变量更加聪明,使得它更快[对于长字符串]至少]。
答案 1 :(得分:1)
使用memset
时不需要scanf
,scanf会将终止'\0'
添加到字符串中。
此外,strlen
是确定字符串长度的更简单方法:
scanf("%s %s", M, W); // provided that M and W contain enough space to store the string
m = strlen(M); // don't forget #include <string.h>
w = strlen(W);
答案 2 :(得分:0)
没有memset的C风格的strlen可能如下所示:
#include <iostream>
using namespace std;
unsigned strlen(const char *str) {
const char *p = str;
unsigned len = 0;
while (*p != '\0') {
len++;
*p++;
}
return len;
}
int main() {
cout << strlen("C-style string");
return 0;
}
回归14。