c - 这个 "make a triangle loop"循环超过必要时间的任何原因

标签 c arrays string c-strings

我有这个函数可以将一个字符数组(即一个字符串)变成一个直角三角形。它可以工作,但即使在阵列停止后它也会继续运行。所以输出总是有很多额外的空白行。

如果单词足够长,随机符号将出现在该空格的末尾。这可能是因为空格超出了 100 的数组大小。 我不知道是什么原因造成的。我试图为计数器和 printf 设置条件以换行,但这完全破坏了代码。我认为这绝对是新行的 printf,但在尝试之后现在看起来不像了。 有没有人看出哪里出了问题?

下面是我的代码中的远程函数。

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


#define clear system("cls") 
#define pause system("pause") 


void triangulate(char stringArray[]){
    int i,j,len = 0;
    int counter=0;
    len=strlen(stringArray);//a function library function that returns the length

    printf("\n");
    for(i=1;i<=len;++i){
        for(j=1;j<=i;++j){
            printf("%c",stringArray[counter]);
            counter++;
        }
        printf("\n");

    }
    printf("len:%i counter:%i",len, counter);
    pause;
}//end triangulate()

最佳答案

这是错误的:

for(i=1;i<=len;++i) {
    for(j=1;j<=i;++j) {
        printf("%c",stringArray[counter]);
        counter++;
    }
    printf("\n");
}

你不能递增计数器这么多次。由于嵌套循环,counter 将访问越界位置 - 您正在将它递增到最终值,即与字符串长度相关的 O(n^2)。

关于c - 这个 "make a triangle loop"循环超过必要时间的任何原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21505028/

相关文章:

c - 编译器的符号表和语义分析

java - FFMPEG 和 JNI - 将 AVFrame 数据传递给 Java 并返回

objective-c - Objective-C header 中的 C 指针损坏

java - 在 Java 中创建数组对象?

android - NullPointerException 获取 StringArray 到 String[]

C 在二进制数之间添加空格

java - 删除元素后向上移动连续索引

javascript - 比较两个数组 Javascript - 关联

string - 使用 go 遍历批量字符串中的行

python - 删除文本文件中以 `#|...|#` 为界的注释 block - python