我需要以下方面的帮助:
将每个连续的大写,小写字母和数字数组分隔为输入字符串中的单独字符串。假设输入字符串仅包含大写,小写字母和数字。输入字符串没有空格。
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;
}
答案 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[^]
进行测试