【问题标题】:How can I delete the first entries from a string如何从字符串中删除第一个条目
【发布时间】:2020-03-10 19:45:18
【问题描述】:

这是我的任务:编写一个程序,读取一个最大长度为 m = 100 的字符串 w 和两个索引 a; [1] 的 b 元素; 100],从键盘输入一个小于或等于 b 的值。然后,以 w[a-1] 开头并以 w[b-1] 结尾的子字符串应打印在屏幕上。我不允许使用函数或循环。 示例:输入:w =“日落”,a = 2,b = 5。输出:“撤消”

我创建了这个程序,但我没有完成最后一步。

int main(){

    char w[100];
    int a, b;

    printf("Please insert a value for a and b, where b is greater than a: ");
    printf("\na = ");
    scanf("%d", &a);

    printf("\nb = ");
    scanf("%d", &b);

    printf("Now please insert a phrase, which is at most 100 character long:\t");
    scanf("%100s", &w);

    w[b] = '\0';

    printf("w = %s", w);
}

【问题讨论】:

  • 记住 char[100] 只能保存 99 个字节的文本,因为最后一个字节是为终止符保留的。
  • w[b]分配一个空终止符,并使用指针算法打印w+a
  • scanf("%100s", &w); 和这个char w[100]; 是绝对危险的。因为scanf 格式说明符%s 在您输入的字符串之后写入一个终止\0,如果您这样做并输入一个包含100 个字符的字符串,则该字符串将存储在缓冲区之外。请改用scanf("%99s", &w);
  • 帮自己一个忙,避免使用 scanf 从键盘读取,而是使用 fgets 并转换为所需的类型,例如atoi 或如果必须使用 sscanf。

标签: c arrays string printf


【解决方案1】:

我通过将 w 的大小延长两个字节或 char w[102]; 并在字符串的开头和结尾使用空字符来解决了这个问题。在这种情况下,您只需使用指针(如char *w_begin;char *w_end;)来指向第一个空字符之后的字符并指向要打印的字符串的结尾。使用这种方法,从w_begin 开始并在w_end 之前结束的字符串被打印出来。

【讨论】:

    【解决方案2】:
    int first = 2;
    int length = 5;
    
    printf("%.*s\n", length - 1, w + first - 1);
    

    【讨论】:

    • 这个答案与我的答案有何不同?
    • 老板没区别,我们只是同时发帖
    【解决方案3】:

    我不经常使用它,但我认为

    printf ("%.*s\n", b -a, w + a - 1);
    
    

    要打印一些你需要的功能

    或者你的方式

    w[b ] = '\0';
    
        printf("w = %s", w+ a-1);
    

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 2022-01-16
      相关资源
      最近更新 更多