如何在c中将字符串转换为单个字母char
How to convert a string into individual letters char in c
我正在尝试 运行 对输入的字符串进行 isalpha 检查,但问题是,isalpha 显然只适用于单个字符。如果我 运行 它在字符串上像这样,我会得到一个分段错误。
可能有更优雅的解决方案,但我找不到将字符串与唯一缺失的字符数组连接起来的方法
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
int i;
int main (void)
{
string text = get_string("Text: \n");
int lenght = strlen(text);
if(isalpha(text))
{
printf("Well done");
}
else
{
printf("You suck");
}
所以我尝试将字符串转换为每个单独的字符数组。否认可能有更优雅的解决方案这一事实,我找不到将字符串与唯一缺失的字符数组连接的方法
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
int i;
int main (void)
{
string text = get_string("Text: \n");
int lenght = strlen(text);
char letter[lenght];
for(i = 0; i < lenght; i++)
{
printf("Letter %i is %c\n", i, letter[i]);
}
}
有什么建议可以让我在继续执行实际功能之前 运行 对我的字符串进行 isalpha 检查吗?
在 CS50 的 header 中,他们将 string
类型定义为 char*
。所以,你的 string
已经是一个 char
数组了,没必要再转换了。您可以使用简单的 strlen
结构:
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
int main (void) {
string text = get_string("Text: \n");
int len = strlen(text);
bool allAlpha = true;
for(int i = 0; i < len; i++) {
if (!isAlpha(text[i])) {
allAlpha = false;
break;
}
}
if (allAlpha) {
printf("Everything's alphabetical.\n");
} else {
printf("There's a non-alphabetical character.");
}
}
虽然,这必须遍历字符串两次,因为 strlen
遍历整个数组。您可以做的一件事是将指针前进,并继续前进,直到找到末尾的空字节:
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
int main (void) {
string text = get_string("Text: \n");
bool allAlpha = true;
for(char* ptr = text; *ptr != '[=11=]'; ptr++) {
if (!isAlpha(*ptr)) {
allAlpha = false;
break;
}
}
if (allAlpha) {
printf("Everything's alphabetical.\n");
} else {
printf("There's a non-alphabetical character.");
}
}
!= '[=18=]'
经常被省略,因为 [=19=]
被认为是假的(因为是零),而其他一切都被认为是真的。
只需编写一个函数来执行此类检查。
它可以看起来像下面的演示程序所示。
#include <stdio.h>
#include <ctype.h>
int is_all_alpha( const char *s )
{
while ( *s && isalpha( ( unsigned char )*s ) ) ++s;
return *s == '[=10=]';
}
int main(void)
{
char *s1 = "Hello";
char *s2 = "2021";
printf( "\"%s\" is %sa valid word\n", s1, is_all_alpha( s1 ) ? "" : "not " );
printf( "\"%s\" is %sa valid word\n", s2, is_all_alpha( s2 ) ? "" : "not " );
return 0;
}
程序输出为
"Hello" is a valid word
"2021" is not a valid word
或者使用名称的定义string
程序可以看起来像
#include <stdio.h>
#include <ctype.h>
#include <cs50.h>
int is_all_alpha( string s )
{
while ( *s && isalpha( ( unsigned char )*s ) ) ++s;
return *s == '[=12=]';
}
int main(void)
{
string s1 = "Hello";
string s2 = "2021";
printf( "\"%s\" is %sa valid word\n", s1, is_all_alpha( s1 ) ? "" : "not " );
printf( "\"%s\" is %sa valid word\n", s2, is_all_alpha( s2 ) ? "" : "not " );
return 0;
}
尽管将函数参数声明为类型 const char *
而不是 string
会更好,因为在函数 is_all_alpha
中指向的字符串不会更改。并且类型 const string
与类型 const char *
不同。类型 const string
是类型 char * const
的别名,这意味着传递的指针本身是常量,而不是指针指向的字符串。
您可以使用 if-else 语句代替 printf 调用中使用的条件运算符。例如
if ( is_all_alpha( text ) )
{
// all symbols of text are letters
// do something
}
else
{
// text contains a non-alpha symbol
// do something else
}
我正在尝试 运行 对输入的字符串进行 isalpha 检查,但问题是,isalpha 显然只适用于单个字符。如果我 运行 它在字符串上像这样,我会得到一个分段错误。
可能有更优雅的解决方案,但我找不到将字符串与唯一缺失的字符数组连接起来的方法
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
int i;
int main (void)
{
string text = get_string("Text: \n");
int lenght = strlen(text);
if(isalpha(text))
{
printf("Well done");
}
else
{
printf("You suck");
}
所以我尝试将字符串转换为每个单独的字符数组。否认可能有更优雅的解决方案这一事实,我找不到将字符串与唯一缺失的字符数组连接的方法
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
int i;
int main (void)
{
string text = get_string("Text: \n");
int lenght = strlen(text);
char letter[lenght];
for(i = 0; i < lenght; i++)
{
printf("Letter %i is %c\n", i, letter[i]);
}
}
有什么建议可以让我在继续执行实际功能之前 运行 对我的字符串进行 isalpha 检查吗?
在 CS50 的 header 中,他们将 string
类型定义为 char*
。所以,你的 string
已经是一个 char
数组了,没必要再转换了。您可以使用简单的 strlen
结构:
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
int main (void) {
string text = get_string("Text: \n");
int len = strlen(text);
bool allAlpha = true;
for(int i = 0; i < len; i++) {
if (!isAlpha(text[i])) {
allAlpha = false;
break;
}
}
if (allAlpha) {
printf("Everything's alphabetical.\n");
} else {
printf("There's a non-alphabetical character.");
}
}
虽然,这必须遍历字符串两次,因为 strlen
遍历整个数组。您可以做的一件事是将指针前进,并继续前进,直到找到末尾的空字节:
#include <stdio.h>
#include <cs50.h>
#include <ctype.h>
#include <string.h>
int main (void) {
string text = get_string("Text: \n");
bool allAlpha = true;
for(char* ptr = text; *ptr != '[=11=]'; ptr++) {
if (!isAlpha(*ptr)) {
allAlpha = false;
break;
}
}
if (allAlpha) {
printf("Everything's alphabetical.\n");
} else {
printf("There's a non-alphabetical character.");
}
}
!= '[=18=]'
经常被省略,因为 [=19=]
被认为是假的(因为是零),而其他一切都被认为是真的。
只需编写一个函数来执行此类检查。
它可以看起来像下面的演示程序所示。
#include <stdio.h>
#include <ctype.h>
int is_all_alpha( const char *s )
{
while ( *s && isalpha( ( unsigned char )*s ) ) ++s;
return *s == '[=10=]';
}
int main(void)
{
char *s1 = "Hello";
char *s2 = "2021";
printf( "\"%s\" is %sa valid word\n", s1, is_all_alpha( s1 ) ? "" : "not " );
printf( "\"%s\" is %sa valid word\n", s2, is_all_alpha( s2 ) ? "" : "not " );
return 0;
}
程序输出为
"Hello" is a valid word
"2021" is not a valid word
或者使用名称的定义string
程序可以看起来像
#include <stdio.h>
#include <ctype.h>
#include <cs50.h>
int is_all_alpha( string s )
{
while ( *s && isalpha( ( unsigned char )*s ) ) ++s;
return *s == '[=12=]';
}
int main(void)
{
string s1 = "Hello";
string s2 = "2021";
printf( "\"%s\" is %sa valid word\n", s1, is_all_alpha( s1 ) ? "" : "not " );
printf( "\"%s\" is %sa valid word\n", s2, is_all_alpha( s2 ) ? "" : "not " );
return 0;
}
尽管将函数参数声明为类型 const char *
而不是 string
会更好,因为在函数 is_all_alpha
中指向的字符串不会更改。并且类型 const string
与类型 const char *
不同。类型 const string
是类型 char * const
的别名,这意味着传递的指针本身是常量,而不是指针指向的字符串。
您可以使用 if-else 语句代替 printf 调用中使用的条件运算符。例如
if ( is_all_alpha( text ) )
{
// all symbols of text are letters
// do something
}
else
{
// text contains a non-alpha symbol
// do something else
}