Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c中读取现有文件以处理数据_C_Dictionary - Fatal编程技术网

在c中读取现有文件以处理数据

在c中读取现有文件以处理数据,c,dictionary,C,Dictionary,我已修改了来自的现有代码` 修改是为了从现有的指向数组的指针中读取。然而,我不断得到信号输出 char*s1,*st1; int i,j; 字符arr[10][10],温度[50]; s1=strtok(str1,“;”); 做 { st7=strstr(s1,“s__;”); 如果(st7!=NULL) { 对于(i=0;i

我已修改了来自的现有代码`

修改是为了从现有的指向数组的指针中读取。然而,我不断得到信号输出

char*s1,*st1;
int i,j;
字符arr[10][10],温度[50];
s1=strtok(str1,“;”);
做
{
st7=strstr(s1,“s__;”);
如果(st7!=NULL)
{
对于(i=0;i<10;++i)
{
对于(j=i+1;st7[j]<10;++j)
{                           
如果(strcmp(arr[st7[i]],arr[st7[j]])>0)
{
strcpy(温度,arr[st7[i]]);
strcpy(arr[st7[i]],arr[st7[j]];
strcpy(arr[st7[j]],温度);
}                           
}
}
printf(“%s\n”,arr[i]);
}           
}而(s1=strtok(NULL,“;”);
s1:分离字符串

st7:从字符串(主结果)中选择子字符串

str1:它是通过主文件的子字符串初始化的(我使用的是fopen)结果包含以例如:k_uhi,s_ubye开头的名称

修改是为了按照字典顺序组织字符串,同时从st7获取字符串[从字符串中选择的子字符串(s1)]


由于我是c编程新手,请告知:)

如果
str1
指向字符串“k_uhi,s_ubye”,则
st7
指向“s_ubye”。所以当你这么做的时候

if(strcmp(arr[st7[i]], arr[st7[j]]) > 0)
i
等于0和
j
等于1时,您可以:

if(strcmp(arr[st7[0]], arr[st7[1]]) > 0)
由于
st7
指向字符串“s___\u bye”,因此它与

if(strcmp(arr['s'], arr['_']) > 0)
使用
's'
'
作为数组索引是而不是,因为数组定义为
arr[10][10]
,即有效索引为0到9,
's'
大于10。换句话说,您的访问位于数组之外,因此代码具有未定义的行为

此外,
arr
未初始化,因此您无法比较任何有效数据。再一次,这是未定义的行为

所以你需要做两件事:

1) 初始化数组

2) 修正索引,使其始终在0到9之间

有点不清楚您在尝试什么,但我想您应该将
st7
指向的字符串复制到数组中,然后对数组进行排序。也许像:

        if (st7 != NULL)
        {
            strcpy(arr[0], st7);  // Not sure which index to use here
                                  // So I just used index 0

            for (i = 0;i < 10; ++i)
            {
                for (j = i + 1; j < 10; ++j)
                {                           
                    if(strcmp(arr[i], arr[j]) > 0)  // Only use i and j for indexing
                    {
                        strcpy(temp, arr[i]);
                        strcpy(arr[i], arr[j]);
                        strcpy(arr[j], temp);
                    }                           
                }
                printf("%s\n", arr[i]);     // Moved inside the loop
            }
        }           

您需要显示如何初始化
str1
arr
,即执行此代码时它们包含的内容。
st7
将指向一个格式为“s_?????”的字符串。使用
s
等字符对
arr
进行索引似乎很奇怪。您仍然需要显示
arr
已定义并初始化..阅读。同时阅读您正在使用的每个函数的说明。对于下一个问题,请提供一些。StackOverflow不是“调试我的代码”站点嗨,我已经编辑了您要求的区域。p、 s:抱歉,如果代码有点不清楚,因为我已经选择了代码的主要功能,因为当您执行strcpy时,我的代码相当长@4386427(arr[9],st7);包括s_________________________吗?或者,其概念是允许程序从bye开始排序,而不是从s_?@yy123
strcpy开始排序(arr[9],st7)将包括“s”。如果要排除“s_uuu”,可以执行以下操作:
strcpy(arr[9],st7+3)谢谢,输出已经显示,但是函数根本不工作。它不是对字符串进行排序。输出只是st7的复制和粘贴@4386427@yy123您是否记得初始化
arr
?你是如何初始化它的?你的strcpy(arr[i],“”)是什么;在这种情况下你会怎么做@4386427
        if (st7 != NULL)
        {
            strcpy(arr[0], st7);  // Not sure which index to use here
                                  // So I just used index 0

            for (i = 0;i < 10; ++i)
            {
                for (j = i + 1; j < 10; ++j)
                {                           
                    if(strcmp(arr[i], arr[j]) > 0)  // Only use i and j for indexing
                    {
                        strcpy(temp, arr[i]);
                        strcpy(arr[i], arr[j]);
                        strcpy(arr[j], temp);
                    }                           
                }
                printf("%s\n", arr[i]);     // Moved inside the loop
            }
        }           
#include <stdio.h>
#include <string.h>

#define NUM_WORDS 4
char arr[NUM_WORDS][50];

void add_word(char* str1)
{
    char *s1, *st1, *st7;
    int i, j;
    char temp[50];

    s1 = strtok(str1, ";");
    do
    {
        st7 = strstr(s1, "s__");
        if (st7 != NULL)
        {
            strcpy(arr[0], st7 + 3);
            for (i = 0;i < NUM_WORDS; ++i)
            {
                for (j = i+1; j < NUM_WORDS; ++j)
                {
                    if (strcmp(arr[i], arr[j]) > 0)
                    {
                        strcpy(temp, arr[i]);
                        strcpy(arr[i], arr[j]);
                        strcpy(arr[j], temp);
                    }
                }
            }
        }           
    } while (s1 = strtok(NULL, ";"));   
}

int main(void) {
    for(int i=0; i<10;++i) strcpy(arr[i], "");
    char s[] = "s__hello;s__seeyou;s__bye;s__hi";
    add_word(s);
    for(int i=0; i<10;++i) printf("%s\n", arr[i]);
    return 0;
}
bye
hello
hi
seeyou