我一直试图制作一个计算输入文字中字符数的程序,而不是计算空格。我知道我必须使用2D数组,但是当我输入一组单词时,我的循环只计算第一个单词中的字符。
这是主要代码:
<input type="text" id="searchBox" placeholder="Search" onChange={this.filterList}/>
如何输入2D数组,以便循环可以读取其中的每个字符串?
答案 0 :(得分:1)
我看到你已声明输入存储在char文本[400] [40]中;这意味着您可以存储400个单词,每个单词长度为40个字符。如果您使用scanf输入单词时,scanf将只接收输入,直到它遇到的第一个空格。所以用fgets来读取输入的单词。 例如: text [0] =“john”; text [1] =“xyzxyz xyz”; 你将能够使用fgets读取这两种格式。
答案 1 :(得分:0)
您可以使用fgets
来读取输入字符串,使用strtok
来解析每个空格处的字符串。
这样的事情可行:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUMWORDS 400
#define WORDLEN 40
#define BUFFSIZE 100
int
main(void) {
char text[NUMWORDS][WORDLEN];
char line[BUFFSIZE], *word;
size_t slen, count = 0;
int i;
printf("Enter some words: ");
if (fgets(line, BUFFSIZE, stdin) == NULL) {
printf("Error reading into buffer.\n");
exit(EXIT_FAILURE);
}
slen = strlen(line);
if (slen > 0) {
if (line[slen-1] == '\n') {
line[slen-1] = '\0';
} else {
printf("Exceeded buffer length of %d.\n", BUFFSIZE);
exit(EXIT_FAILURE);
}
}
if (!*line) {
printf("No words entered.\n");
exit(EXIT_FAILURE);
}
word = strtok(line, " ");
while (word != NULL) {
if (strlen(word) >= WORDLEN) {
printf("\nYour word \"%s\" is longer than word size limit: %d\n",
word, WORDLEN);
exit(EXIT_FAILURE);
}
strcpy(text[count], word);
count++;
word = strtok(NULL, " \n");
}
if (count > NUMWORDS) {
printf("Too many words entered.\n");
exit(EXIT_FAILURE);
}
printf("\nYour array of strings:\n");
for (i = 0; i < count; i++) {
printf("text[%d] = %s\n", i, text[i]);
}
return 0;
}
输入:
Enter some words: sadsad asdasdasd asdasdasdasd
输出:
Your array of strings:
text[0] = sadsad
text[1] = asdasdasd
text[2] = asdasdasdasd
答案 2 :(得分:0)
如果您只想计算输入文字的字符?我会做这样的事情(if(* s!= 32)是不计算空格,ASCII“space”=十进制32):
int main()
{
int size = 0;
char input[200] = "This is an input string";
size = mystrlen(input);
printf("size=%d", str);
return 0
}
int mystrlen(char *s)
{
int i = 0;
while (*s++) {
if (*s != 32)
i++;
}
return i;
}
output: size = 19;
答案 3 :(得分:0)
只是因为scanf读到第一个空格。 你必须在这里使用gets。 这是一个简单的字符计数,没有空格:
char str [100];
int i=0,cpt=0;
printf ("Enter some words: ");
gets (str);
While(str [i]!='\0'){
if (str [i]!=' '){
cpt++;
}
i++;
}
printf ("Size: %d",cpt);
答案 4 :(得分:0)
首先是scanf(&#34;%s&#34;,&amp; text);你正在使用不会读取任何空格。它只会读取,直到名称中遇到第一个空格。使用scanf(&#34;%[^ / n] s&#34;,&amp; text);而是用空格读取名称。 你正在阅读2D数组的方式是错误的。简单的方法是使用for循环。
示例:
for (i=0;i<n;i++)
{
scanf ("%[^/n]s,text[i]);
}