在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_?@yy123strcpy开始排序(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