c - 空格不应计入字符串长度

标签 c arrays string loops

此代码获取用户输入,然后使用 256% 长度的字符串。如果结果为 3 且输入为 abc,则输出为 bcd。这很好用。但是,如果输入是例如“嘿,怎么办”,长度是 11,它应该是 10,因为长度不应该包含空格。

如何编写此代码,使其不将空间计入长度?

甚至可以在使用 fgets 的同时实现它吗?

提前谢谢你。

#include <stdio.h>
#include <string.h> 
#include <stdlib.h>

  int main() {

    char array[20];
    int length = 0;
    int i;
    int key = 256;

    printf("input:  ");

    fgets(array, 20, stdin);

    length = strlen(array) - 1;

    key = key % length;

    if (key > 0) {

      for (i = 0; i < length; i++) {

        if (array[i] == ' ') {

          printf("%c", array[i]);

          continue;

        }
        array[i] = array[i] + key;

        printf("%c", array[i]);
      }

    }

    return 0;
  }

最佳答案

1) 如果您不想在计算 key 时包含空格,则必须自己编写函数来计算空格数。

2) 代码 length = strlen(array) - 1; 似乎“照顾”了字符串末尾的 '\n'。但是,您不能确定是否存在 '\n'。您需要先检查一下。

3) 执行 key % 0 将是“错误的”,因此也要检查一下

代码可能类似于:

#include <stdio.h>
#include <string.h> 
#include <stdlib.h>

int cnt_spaces(char* arr)
{
    int res = 0;
    while(*arr)
    {
        if (*arr == ' ')
        {
            ++res;
        }
        ++arr;
    }
    return res;
}

int main() {
    char array[20];
    int length = 0;
    int i;
    int key = 256;

    printf("input:  ");

    fgets(array, 20, stdin);
    length = strlen(array);
    if (strlen(array) == 0) return 0;  // or add error handling

    // Remove \n if present
    if (array[length-1] == '\n')
    {
        array[length-1] = '\0';
        --length;
    }
    printf("len = %d\n", length);

    int spaces = cnt_spaces(array);
    printf("spaces = %d\n", spaces);

    if (length == spaces) return 0;  // or add error handling
    key = key % (length - spaces);

    printf("key = %d\n", key);

    if (key > 0) {
        for (i = 0; i < length; i++) {
            if (array[i] != ' ') {
                array[i] = array[i] + key;
            }
            printf("%c", array[i]);
        }
    }

    return 0;
  }

例子:

input:  a b c
len = 5
spaces = 2
key = 1
b c d

关于c - 空格不应计入字符串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53635000/

相关文章:

c - 使不同的可执行文件成为一个供所有人使用的库

arrays - 声明动态数组未按预期工作

c++ - 当我传递从 stringstream 构建的 char 指针时,ofstream open(...) 失败

c - 在 strdup C 之前附加字符串

c - fscanf 到链接列表

c - 我的程序没有将输入数据存储到 C 中的结构中

代码错误 无法插入字符

json - Go:检测无效 JSON 字符串字符的最佳方法是什么?

c - 如何使用带有 OpenGL 的 Nurbs 知道特定值的位置?

php - 稳定的 uasort - 为什么顺序被颠倒了?