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