【问题标题】:Cant take out a number from a group of string - C不能从一组字符串中取出一个数字 - C
【发布时间】:2015-10-06 07:55:21
【问题描述】:

我只想从字符串组中取出一个数字“865733024598757”。这看起来非常沮丧。一个简单的我已经尝试了一个小时,仍然无法得到解决方案。我的代码有什么问题?

这是我的代码

#include<stdio.h>
#include<string.h>
int main()
{
    int i;
    char imeino[100]="\r\n865733024598757 OK\r\n";
    char data[20];
    for(i=2;i<17;i++)
        {
            //printf("%c",imeino[i]);
            data[i]=imeino[i];
        }
    printf("%s",data);
    return 0;
}

谢谢...

【问题讨论】:

  • 所以您已经知道数字在哪里,并且您真的想通过索引提取子字符串,对吧?
  • 复制后数据结尾处为空终止。
  • 您需要使用'\0' 终止您的目标字符串。注意imeonodata中字符的索引是不同的:imeino中的字符2会变成data中的字符0。
  • memcpy 是你的朋友。
  • for(i=0;i&lt;15;i++) { data[i]=imeino[i+2]; } data[i] = 0;

标签: c arrays string char


【解决方案1】:

使用您的代码

#include<stdio.h>
#include<string.h>
int main()
{
    int i;
    char imeino[100]="\r\n865733024598757 OK\r\n";
    char data[20];
    for(i=2;i<17;i++)
        {
            data[i-2]=imeino[i];
        }
    data[i-2] = '\0';
    printf("%s",data);
    return 0;
}

如你所见:

  1. 数据的索引必须从 0 开始。i 从 2 开始,则必须将其减去索引数据数组。
  2. 您必须NUL 终止您的字符串。

可以使用许多更好的实现。来看看

【讨论】:

  • 空终止符也必须在i - 2。 (也许将偏移量放在imeino 上并让循环从零运行到子字符串长度更直观?这也可以更容易一目了然地发现新的字符串长度。)
【解决方案2】:

正确的工作代码

#include<stdio.h>
#include<string.h>
int main()
{
    int i;
    char imeino[100] = "\r\n865733024598757 OK\r\n";
    char data[20] = {0};
    for (i = 2; i< 17; i++)
    {
        //printf("%c",imeino[i]);
        data[i-2] = imeino[i];
    }
    printf("%s", data);
    return 0;
}

【讨论】:

  • @LPs,所有成员都初始化为0,这段代码对我来说似乎是正确的。
  • @LPs:确实如此。当一个数组的一些但不是所有元素被显式初始化时,其余元素被初始化为零。未定义的行为将只是一个未初始化的数组,即只是char imeino[20];
  • 是的,我的错。已删除。
猜你喜欢
  • 2021-04-17
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
相关资源
最近更新 更多