输入C风格的字符串并获取长度

时间:2013-05-12 08:12:27

标签: c++ char

字符串输入格式是这样的

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长度输入和内存限制我切换到了。如果有一种有效的方法来获取字符串那么它会很好

3 个答案:

答案 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。