从输入字符串创建字符串数组

时间:2016-03-02 12:06:08

标签: c string

我需要以下方面的帮助:

将每个连续的大写,小写字母和数字数组分隔为输入字符串中的单独字符串。假设输入字符串仅包含大写,小写字母和数字。输入字符串没有空格。

Example:
Input string: thisIS1inputSTRING
OUTPUT:
1. string: this
2. string: IS
3. string: 1
4. string: input
5. string: STRING

以下程序不提供任何输出:

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

int main() {
    char str[512], word[256];
    int i = 0, j = 0;

    printf("Enter your input string:");
    gets(str);

    while (str[i] != '\0') {

        //how to separate strings (words) when changed from 
        //uppercase, lowercase or digit?
        if (isdigit(str[i]) || isupper(str[i]) || islower(str[i])) {
            word[j] = '\0';
            printf("%s\n", word);
            j = 0;
        } else {
            word[j++] = str[i];
        }
        i++;
    }

    word[j] = '\0';
    printf("%s\n", word);

    return 0;
}

1 个答案:

答案 0 :(得分:2)

你的解决方案出错了,因为评论中也写了(isdigit(str[i]) || isupper(str[i]) || islower(str[i]))语句总是正确的。

如果您想使用if语句坚持您的解决方案,那么您必须检查下一个字符。如果下一个charactertype与实际字符类型不同,那么你必须打印出你的单词,因为下一个字符是不同的类型。

我将您的代码调整为以下内容:

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

int main() {
    char str[512], word[256];
    int i = 0, j = 0;

    printf("Enter your input string:");
    gets(str);

    while (str[i] != '\0') {
            //how to separate strings (words) when changed from 

            // Is the next character the end of the string?
            if(str[i+1] != '\0'){   // <<<
                //uppercase, lowercase or digit?
                if (
                    isdigit(str[i]) && (isupper(str[i+1]) || islower(str[i+1])) // <<<
                    || isupper(str[i]) && (isdigit(str[i+1]) || islower(str[i+1]))  // <<<
                    || islower(str[i]) && (isupper(str[i+1]) || isdigit(str[i+1]))  // <<<
                ){
                        word[j] = str[i];   // <<<
                        word[j+1] = '\0';   // <<<
                        printf("%s\n", word);
                        j = 0;
                } else {
                        word[j++] = str[i];
                }   
            }
            else {
                // End of the string, write last character in word
                word[j] = str[i];   // <<<
                word[j+1] = '\0';   // <<<
                printf("%s\n", word);
            }
            i++;
    }
    return 0;
}

这将导致以下输出:

Enter your input string:this
IS
1
input
STRING

您可以使用自己的link[^]

进行测试