这不是一件小事,但我想知道处理多个输出的最佳方法,例如:
输入
第一行输入将包含数字T =测试用例数。以下行将包含每个字符串。
输出
对于每个字符串,在一行上打印“UNIQUE” - 如果字符都是唯一的,则打印“NOT UNIQUE”
示例输入
3
DELHI
london
#include<iostream>
示例输出
UNIQUE
NOT UNIQUE
NOT UNIQUE
那么我怎样才能完成那样的输出呢?到目前为止我的代码是:
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是不好的,那该怎么办?
答案 0 :(得分:0)
希望这会有所帮助:
#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");
}
}
}
答案 1 :(得分:0)
如果您想保存以供日后使用,您必须将其存放在某个地方。以下示例在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;
}
请注意输入和输出的两个独立循环。
我也重新调整了你的输入。我不是很喜欢fscanf
;我更喜欢使用fgets
读取输入行,然后使用strtok
或sscanf
分析行。优于fscanf
的优点是你的字符串可能包含空格。缺点是你有一个你通常不想要的换行符,并且必须“扼杀”。
如果你想允许更长的字符串,你应该使用malloc
进行动态分配,虽然我不确定从控制台读取用户输入时它是否有用。当你理解堆栈上固定大小分配的基础知识时,解决这个问题。
其他人已经指出了您检查唯一性时的错误。