用C语言处理多输入输出

用C语言处理多输入输出,c,string,C,String,这不是一件小事,但我想知道处理多个输出的最佳方法,例如: 输入 输入的第一行将包含一个数字T=测试用例的数量。以下各行将包含一个字符串 输出 对于每个字符串,在一行上打印“唯一”-如果字符都是唯一的,则打印“不唯一” 样本输入 3 DELHI london #include<iostream> 那么我怎样才能完成这样的输出呢?到目前为止,我的代码是: int main(int argc, char *argv[]) { int inputs, count=

这不是一件小事,但我想知道处理多个输出的最佳方法,例如:

输入

输入的第一行将包含一个数字T=测试用例的数量。以下各行将包含一个字符串

输出

对于每个字符串,在一行上打印“唯一”-如果字符都是唯一的,则打印“不唯一”

样本输入

 3
 DELHI
 london
 #include<iostream>
那么我怎样才能完成这样的输出呢?到目前为止,我的代码是:

 int main(int argc, char *argv[]) 
 {

     int inputs, count=0;
     char str[100];
     char *ptr;

     scanf("%d",&inputs);


     while(inputs-- >0)
     {
         scanf("%s",str);

         for(ptr=str; *ptr!='\0';ptr++)
         {
             if( *ptr== *(ptr+1))
             {
                 count++;
             }
         }
         if(count>0)
         {
             printf("NOT UNIQUE");

         }
         else
         {
             printf("UNIQUE");
         }

     }

 }
但上面的内容显然会在每次输入后打印输出,但我只希望在输入所有输入后才输出,如果用户输入3,则用户必须给出3个字符串,并且在输出后将给出给定字符串是否唯一。所以我想知道如何才能达到问题中给出的结果。我还想知道的另一件事是,我使用的是一个100字符的数组,它可以容纳最多100个字符的字符串,但是如果我想不受限制地处理字符串,我该怎么做呢?仅仅声明char*str是不好的,那么怎么办呢

希望这有助于:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int inputs,count=0;
    char str[20];
    scanf("%d",&inputs);
    char *ptr;
    char *dummy;

    while(inputs-- >0)
    {
        scanf("%s",str);

        for(ptr=str; *ptr!='\0';ptr++)
        {
            for(dummy=ptr+1; *dummy != '\0';dummy++)
            {
                if( *ptr== *dummy)
                {
                    count=1;
                }
            }
            if(count == 1)
                break;
        }
        if(count>0)
        {
            printf("NOT UNIQUE");
        }
        else
        {
            printf("UNIQUE");
        }
    }
}
#包括
int main(int argc,char*argv[])
{
int输入,计数=0;
char-str[20];
scanf(“%d”、&input);
char*ptr;
字符*虚拟;
同时(输入-->0)
{
scanf(“%s”,str);
对于(ptr=str;*ptr!='\0';ptr++)
{
对于(dummy=ptr+1;*dummy!='\0';dummy++)
{
如果(*ptr==*虚拟)
{
计数=1;
}
}
如果(计数=1)
打破
}
如果(计数>0)
{
printf(“非唯一”);
}
其他的
{
printf(“唯一”);
}
}
}

如果你想保存东西以备日后使用,你必须把它存放在某个地方。下面的示例在
buf
中最多存储10行,然后将
str
指向当前行:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>    /* for strlen */
#include <ctype.h>     /* for isspace */

int main(int argc, char *argv[]) 
{
    int ninput = 0;
    char buf[10][100];      /* storage for 10 strings */
    char *str;              /* pointer to current string */
    int i;

    printf("Enter up to 10 strings, blank to and input:\n");

    for (i = 0; i < 10; i++) {
        int l;

        str = buf[i];

        /* read line and break on end-of-file (^D) */
        if (fgets(str, 100, stdin) == NULL) break;

        /* delete trailing newline & spaces */
        l = strlen(str);
        while (l > 0 && isspace(str[l - 1])) l--;
        str[l] = '\0';

        /* break loop on empty input */
        if (l == 0) break;
        ninput++;
    }

    printf("Your input:\n");
    for (i = 0; i < ninput; i++) {
        str = buf[i];
        printf("[%d] '%s'\n", i + 1, str);
    }

    return 0;
}
#包括
#包括
#包括/*用于斯特伦*/
#包括/*用于iSpace*/
int main(int argc,char*argv[])
{
int-ninput=0;
char buf[10][100];/*存储10个字符串*/
char*str;/*指向当前字符串的指针*/
int i;
printf(“最多输入10个字符串,空白输入:\n”);
对于(i=0;i<10;i++){
int l;
str=buf[i];
/*读取文件(^D)结尾的行和分隔符*/
如果(fgets(str,100,stdin)=NULL)中断;
/*删除尾随换行符和空格(&S)*/
l=strlen(str);
而(l>0&&isspace(str[l-1])l--;
str[l]='\0';
/*空输入中断循环*/
如果(l==0)中断;
ninput++;
}
printf(“您的输入:\n”);
对于(i=0;i
注意输入和输出的两个独立循环

我还重新调整了你的输入。我不太喜欢
fscanf
;我喜欢用
fgets
逐行读取输入,然后用
strtok
sscanf
分析该行。与
fscanf
相比,yout字符串可能包含空格。缺点是你在结尾有一个新行,你通常不想要,而且不得不“咀嚼”

如果您想允许更长的字符串,应该使用动态分配和
malloc
,尽管我不确定它在从控制台读取用户输入时是否有用。当您了解了堆栈上固定大小分配的基础知识后,就可以解决这个问题


其他人已经向您指出了唯一性检查中的错误。

我不知道您给出了什么解决方案,但问题仍然是一样的,它在用户键入字符串并点击enter键后立即给出输出,但我想要“样本输入”和“样本输出”之类的输出或者像->样本输入:3德里伦敦#包括样本输出:唯一不唯一不唯一哦好!我在编辑你的问题之前写下了这个答案。从您的代码中,我看到您正在尝试获取输入并立即打印输出。我已经纠正了你试图找到单词是否唯一的逻辑。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>    /* for strlen */
#include <ctype.h>     /* for isspace */

int main(int argc, char *argv[]) 
{
    int ninput = 0;
    char buf[10][100];      /* storage for 10 strings */
    char *str;              /* pointer to current string */
    int i;

    printf("Enter up to 10 strings, blank to and input:\n");

    for (i = 0; i < 10; i++) {
        int l;

        str = buf[i];

        /* read line and break on end-of-file (^D) */
        if (fgets(str, 100, stdin) == NULL) break;

        /* delete trailing newline & spaces */
        l = strlen(str);
        while (l > 0 && isspace(str[l - 1])) l--;
        str[l] = '\0';

        /* break loop on empty input */
        if (l == 0) break;
        ninput++;
    }

    printf("Your input:\n");
    for (i = 0; i < ninput; i++) {
        str = buf[i];
        printf("[%d] '%s'\n", i + 1, str);
    }

    return 0;
}