c - 如何在 C 中解析字符串?

标签 c

本人初学C;所以,请放轻松。 :)

我正在尝试编写一个非常简单的程序,将字符串中的每个单词放入“Hi(输入)!”句子(假设您输入姓名)。另外,我正在使用数组,因为我需要练习它们。

我的问题是,一些垃圾被放入某个地方的数组中,它弄乱了程序。我试图找出问题所在,但无济于事;所以,是时候寻求专家的帮助了。我哪里出错了?

p.s.: 也有某处出现死循环,但很可能是数组中放入垃圾的结果。

#include <stdio.h>
#define MAX 500 //Maximum Array size.

int main(int argc, const char * argv[])
{
    int stringArray [MAX];
    int wordArray [MAX];
    int counter = 0;
    int wordCounter = 0;

    printf("Please type in a list of names then hit ENTER:\n");  
    // Fill up the stringArray with user input.
    stringArray[counter] = getchar();
    while (stringArray[counter] != '\n') {
        stringArray[++counter] = getchar();
    }

    // Main function.
    counter = 0;
    while (stringArray[wordCounter] != '\n') {     
        // Puts first word into temporary wordArray.
        while ((stringArray[wordCounter] != ' ') && (stringArray[wordCounter] != '\n')) {
            wordArray[counter++] = stringArray[wordCounter++];
        }
        wordArray[counter] = '\0';

        //Prints out the content of wordArray.
        counter = 0;
        printf("Hi ");
        while (wordArray[counter] != '\0') {
            putchar(wordArray[counter]);
            counter++;
        }
        printf("!\n");

        //Clears temporary wordArray for new use.
        for (counter = 0; counter == MAX; counter++) {
            wordArray[counter] = '\0';
        } 
        wordCounter++;
        counter = 0; 
    }
    return 0;
}

解决了!当我递增 wordCounter 时,我需要将以下 if 句子添加到末尾。 :)

    if (stringArray[wordCounter] != '\n') {
            wordCounter++;
    }

最佳答案

您正在使用 int 数组来表示字符串,可能是因为 getchar()int 中返回。但是,字符串最好表示为 char 数组,因为在 C 中它们就是这样。getchar() 返回 int 的事实是肯定令人困惑,这是因为它需要能够返回特殊值 EOF,这不适合 char。因此它使用 int,这是一种“更大”的类型(能够表示更多不同的值)。因此,它可以适合所有 char 值, EOF

有了char数组,就可以直接使用C的字符串函数了:

char stringArray[MAX];

if(fgets(stringArray, sizeof stringArray, stdin) != NULL)
   printf("You entered %s", stringArray);

请注意,fscanf() 会在字符串中保留行尾字符,因此您可能希望将它们去掉。我建议实现一个就地函数来去除前导和尾随空格,这也是一个很好的练习。

关于c - 如何在 C 中解析字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13230253/

相关文章:

c - pthread_join() 导致段错误

c - pthread编程,线程不会同时运行

将整数和 float 的字符串转换为 C 中的 float 组

c - 在 C 中进行大型数学运算时结果错误

c - 如何将文件名列表传递给C程序

c++ - 为 Windows 开发音乐应用程序

c - 从 C 中的函数返回结构的机制是什么

c - 指向静态变量的指针的不便之处

c++ - 从基本的 c/cpp Linux 应用程序中公开状态信息

c - 使用 fscanf 获取 2 列中的 2 个字符串