繁体   English   中英

输入C样式的字符串并获取长度

[英]Input C-style string and get the length

字符串输入格式是这样的

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但是由于25000的长度输入和cin的内存限制,我切换到了这一点。如果有一种有效的方式来获取字符串,那会很好

除了已经给出的答案之外,我认为您的代码略有错误:

   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 a,因此不需要用0 [或'0' ]填充整个字符串。

并且strlen是一个现有函数,将提供C样式字符串的长度,并且比起仅检查每个字符并增加两个变量,它更有可能具有更聪明的算法,从而使其速度更快(至少对于长字符串而言)。

使用scanf时不需要memset ,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);

没有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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM